Ich verwende erfolgreich die setValue(value, forKey: key)
Methode in meiner NSKeyValueCoding-kompatiblen Swift NSObject-Unterklasse.Verwenden von SetValue (Wert, forKey: Schlüssel) auf Int? Typen feuert Nicht-Schlüsselwert Kodierung-konforme Methode
Dies funktioniert perfekt auf String Optionen, z.
var name:String?
jedoch auf optionals Int, es scheitert, die undefinierte Schlüsselmethode Auslösung, die ich für Debug-Zwecke außer Kraft gesetzt habe:
override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
println("\(self) this class is not key value coding-compliant for the key \(key)")
}
So zum Beispiel eines Schlüssel von myId
mit einem guten ganzzahligen Wert würde triggern Sie die oben beschriebene undefinierte Schlüsselmethode.
var myId:Int?
Wenn ich die obige Definition ändere nicht optional sein, dann funktioniert alles einwandfrei:
var myId:Int = 0
Mit myId
als optionalen, ich habe absolut alles versucht, ich in der Art und Weise denken kann, Casting, Unpacking, Initialisierung, und so weiter. Es sieht die Klasse nicht als Schlüsselwert für diese numerischen Werte.
Ich weiß, dass es ein guter numerischer Wert ist. Ändern der var-Deklaration in String? stürzt ab. Es sieht auch gut in LLDB:
Printing description of key:
myId
key NSObject 0x00007fb8d530ca20 0x00007fb8d530ca20
k NSString "myId" 0x00007fa2aa942f20
value __NSCFNumber * Int64(4348129) 0xb000000004258e13
Printing description of value:
4348129
(lldb)
So wird die Frage, hat jemand verwendet - in Swift - die NSKeyValueCoding Methode setValue(value, forKey: key)
auf einen Int-Typ erfolgreich?
Könnte dies sein, weil Int beliebigen Typ und nicht ANYOBJECT ist. Ich habe versucht, ein Objekt zu einem Wörterbuch und zurück zu analysieren und hatte ähnliche Probleme. Siehe https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVReflection.swift Sie können sehen, dass ich versucht habe, Any zu AnyObject zu analysieren. Nullable-Werte sind immer noch ein Problem, aber es funktioniert auf einem Int. –