Ich habe Objekt wie folgt:Was ist der Unterschied zwischen setValue und myObject.propertyName in iOS Swift 3.1?
class Human: NSObject {
var name:String!
var age:Int!
}
Und Instanz von Objekt wie folgt machen:
let instance = Human()
Und meine Werte wie folgt festgelegt:
instance.name = "Kirk"
instance.age = 87
Und es wie folgt drucken:
print("name: \(instance.name)") // Kirk
print("age: \(instance.age)") //87
Alles ist in Ordnung. sondern setzen jetzt meine Werte eine andere Art und Weise wie folgt aus:
instance.setValue("Kirk", forKey: "name")
instance.setValue(87, forKey: "age")
Erhalten Sie diesen Fehler für Int datatype:
*** Beenden app aufgrund nicht abgefangene Ausnahme 'NSUnknownKeyException' Grund: ‚[setValue : forUndefinedKey:]: Diese Klasse ist für den Schlüsselalter nicht Schlüsselcode-konform.
Warum ist das passiert?
Und wie das zu beheben, weil ich setValue() Funktion verwenden muss.
arbeiten Der Unterschied ist, dass 'instance.name' ist die Eigenschaft, über native Swift Mechanismen zugreifen, während' instance.setValue ("Kirk", forKey: "name") 'erfordert ist Schlüsselwert-Codierung (KVC), was nur funktioniert, wenn die Typen in Objective-C dargestellt werden können. Wie andere darauf hingewiesen haben, kann 'Int!' In Objective-C nicht dargestellt werden, so dass es nicht an KVC teilnehmen kann. Ändern Sie "Alter" von "Int!" Zu "Int" oder "NSNumber!" Und es wird gut funktionieren. (Wenn Sie es in "Int" ändern, müssen Sie sicherstellen, dass es auf einen Nicht-Nil-Wert initialisiert wird, vermutlich mit der Methode "init", die den Wert als Parameter verwendet.) – Rob
Mögliches Duplikat von [Why kann ich KVC nicht von einem Objective-C-Objekt zu einer Swift-Eigenschaft verwenden?] (http://stackoverflow.com/questions/35783888/why-cani-i-not-use-kvc-from-an-objective-c- object-to-a-swift-property) –