2016-04-21 8 views
0

ist eine Möglichkeit, enum associated Werte in Swift ändern? Ich mache es so, aber jedes Mal muss ich das ganze Objekt überschreiben. Es ist nicht elegant.Ändern Enum Associated Values ​​

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

      ... 

      self.days = Option.Days(newChoices) 

     default: 
      break 
    } 

Antwort

1

Es ist nicht den zugehörige Wert von Enum Fall zu modifizieren erlaubt, aber Sie können einen Typen mit Referenz-Semantik (dh Klasse) verwenden, um einen veränderbaren Wert innerhalb eines Behälters wie so anbringt:

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) 

Obwohl es für mich nicht sehr elegant aussieht.