Vor Swift 3, entschlüsseln Sie Boolesche Werte mit NSCoder wie folgt aus:Swift 3: Sicherer Weg, um Werte mit NSCoder zu dekodieren?
if let value = aDecoder.decodeObjectForKey(TestKey) as? Bool {
test = value
}
Der vorgeschlagene Ansatz in Swift 3 ist dies stattdessen zu verwenden:
aDecoder.decodeBool(forKey: TestKey)
Aber die Klassenreferenz für decodeBool
nicht der Fall ist Erklären Sie, wie Sie mit der Situation umgehen, wenn der Wert, den Sie dekodieren, nicht wirklich ein boolescher Wert ist. Sie können decodeBool
nicht in eine let-Anweisung einbetten, da der Rückgabewert kein optionaler Wert ist.
Wie dekodieren Sie Werte in Swift 3 sicher?
Wenn nicht aDecoder.decodeBool bereitgestellt boolean, den Fehler auslöst, wie es Boolean erwartet auf ly. Du musst also sicher sein, dass es Bool ist, oder? – pedrouan
richtig, es ist also kein sicherer Weg, @pedrouan zu überprüfen. Der Fehler würde mit der Swift 2-Syntax gefangen werden. – Crashalot
Sie müssen wissen, welchen Typ Sie codieren. Dies ist in einigen Fällen etwas schwierig, insbesondere weil "Bool" als "Bool" kodiert ist, während "Bool?" Als "Object" kodiert ist. Siehe http://stackoverflow.com/questions/38072295/fail-to-decode-int-with-nscoder-in-swift. – Sulthan