Core Data selbst bietet keine Möglichkeit an, Enumerations direkt zu verwalten. Über einen kleinen Trick ist dies jedoch trotzdem möglich.
In diesem kleinen Beispiel möchten wir das Feld state als Enum mit den Werten .Default, .New, .Download und .Failed haben. Im Model legen wir dazu ein Feld mit dem Namen stateInt an.
Das Feld wird als Int16 definiert.
In unserem NSManagedObject legen wir das nun folgendermaßen an:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
enum MyState: Int16 { case Default, New, Download, Failed } class MyObject: NSManagedObject { @NSManaged var stateInt: Int16 var state: MyState { get { return MyState(rawValue: self.stateInt) ?? .Default } set { self.stateInt = newValue.rawValue } } } |
Zuerst definieren wir die verschiedenen Status im MyState-Enum und referenzieren unser stateInt-Feld als Int16.
Danach legen wir ein Member state mit Getter und Setter an. Über die Eigenschaft rawValue können wir nun die Enum-Werte über Integer lesen und schreiben. Beim get gibt es noch die Besonderheit, dass wir in dem Fall, dass noch kein Wert gespeichert wurde, .Default zurückgeben.
Nun können wir einfach über state auf die gespeicherten Werte zugreifen:
1 |
myObject.state = .New |