ArkaplanEnum'u NSCoder kullanarak hızlıca nasıl kodlarım?
Ben NSCoding protokolünü kullanarak bir dize tarzı enum kodlamak çalışıyorum ama yapmak dönüştürme hataları içine koşu ve geri String duyuyorum.
Ben aşağıdaki hataları alırken çözme ve kodlama: çağrı
Kod
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
}
// ...
}
yılında:
Dize
Ekstra argüman ForKey Basamağa dönüştürülebilir değil
! o zaman String asla sıfır olamaz ve '?? .DisplayAll' işe yaramaz. Bunun yerine? 'Değil mi? – Oren
"As!", Var olan "String" i çevirir, böylece cast başarılı olur. 'Stage (rawValue:" someString ")', isteğe bağlı olarak döndürür, çünkü dize geçerli bir enum değeri tanımlayamaz. O isteğe bağlı istemedin. * Nil birleştirme operatörü *, isteğe bağlı olarak isteğe bağlı olmayan bir sürümle değiştirir ya da yoksa, “.DisplayAll” ile değiştirir. – vacawama