фонКак кодировать перечисление с помощью NSCoder в swift?
Я пытаюсь кодировать перечисление строк в стиле с использованием протокола NSCoding, но я бегу на ошибки переходящих и обратно из String.
я получаю следующие ошибки во время декодирования и кодирования:
Строка не конвертируется в Stage
дополнительный аргумент ForKey: в вызове
Код
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
}
// ...
}
Если у вас есть, как! то String никогда не может быть nil и '?? .DisplayAll' бесполезен. Разве это не должно быть «как?»? – Oren
'as!' Отличает 'String', который существует, поэтому приведение будет успешным. 'Stage (rawValue:" someString ")' возвращает необязательный параметр, потому что строка может не определять действительное значение перечисления. Вы должны развернуть это необязательное. Оператор * nil coalescing * заменяет необязательный вариант с развернутой версией, если он существует, или '.DisplayAll', если это не так. – vacawama