SfondoCome si codifica enum utilizzando NSCoder in swift?
Sto cercando di codificare un enum String stile utilizzando il protocollo NSCoding, ma io sono in esecuzione in errori di conversione di andata e ritorno da stringa.
Ottengo i seguenti errori durante la decodifica e la codifica:
String non è convertibile in Fase
Extra argomento Forkey: in chiamata
Codice
enum Stage : String
{
case DisplayAll = "Display All"
case HideQuarter = "Hide Quarter"
case HideHalf = "Hide Half"
case HideTwoThirds = "Hide Two Thirds"
case HideAll = "Hide All"
}
class AppState : NSCoding, NSObject
{
var idx = 0
var stage = Stage.DisplayAll
override init() {}
required init(coder aDecoder: NSCoder) {
self.idx = aDecoder.decodeIntegerForKey("idx" )
self.stage = aDecoder.decodeObjectForKey( "stage") as String // ERROR
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(self.idx, forKey:"idx" )
aCoder.encodeObject( self.stage as String, forKey:"stage") // ERROR
}
// ...
}
Se si dispone come! allora la stringa non può mai essere nulla e '?? .DisplayAll' è inutile. Non dovrebbe invece essere "come?" Invece? – Oren
Il 'as!' Sta lanciando il 'String' che esiste così il cast avrà successo. 'Stage (rawValue:" someString ")' restituisce un opzionale poiché la stringa potrebbe non definire un valore enum valido. Devi scartare quello facoltativo. L'operatore * nil coalescing * sostituisce quello facoltativo con una versione unwrapped se esiste o '.DisplayAll' se non lo è. – vacawama