2016-04-21 141 views
0

是修改Swift中枚舉的關聯值的方法嗎?我這樣做,但每次我都必須重寫整個對象。這不是優雅。修改枚舉關聯值

switch option { 
     case .Days(let choices): 
      var newChoices = choices 

      ... 

      self.days = Option.Days(newChoices) 

     default: 
      break 
    } 

回答

1

它不允許修改枚舉案件的相關值,但你可以使用一種參考的語義(即)裝在容器內一個可變值,像這樣:

class Box<T>: CustomDebugStringConvertible { 
    var value: T 
    var debugDescription: String { return "\(value)" } 
    init(_ value: T) { self.value = value } 
} 

enum X { 
    case A(Box<Int>), B(Box<String>) 
} 

let x = X.A(Box(1)) 
let y = X.B(Box("xxx")) 

print(x, y) // A(1) B(xxx) 

if case let X.A(box) = x { 
    box.value = 2 
} 

if case let X.B(box) = y { 
    box.value = "yyy" 
} 

print(x, y) // A(2) B(yyy) 

儘管如此,它對我來說看起來並不高雅。