2016-04-21 90 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) 

尽管如此,它对我来说看起来并不高雅。