Je objet comme ceci:Quelle est la différence entre setValue et myObject.propertyName dans iOS Swift 3.1?
class Human: NSObject {
var name:String!
var age:Int!
}
Et fais exemple de l'objet comme celui-ci:
let instance = Human()
Et mis mes valeurs comme ceci:
instance.name = "Kirk"
instance.age = 87
et l'imprimer comme ceci:
print("name: \(instance.name)") // Kirk
print("age: \(instance.age)") //87
Tout est OK. mais maintenant définir mes valeurs d'une autre manière comme ceci:
instance.setValue("Kirk", forKey: "name")
instance.setValue(87, forKey: "age")
Obtenir cette erreur pour Int dataType:
*** en raison de l'application Mettre fin exception uncaught 'NSUnknownKeyException', la raison: « [setValue : forUndefinedKey:]: cette classe n'est pas compatible avec le codage de valeur de clé pour l'âge de clé. '
Pourquoi cela est-il arrivé?
Et comment résoudre ce problème, car j'ai besoin d'utiliser la fonction setValue().
La différence est que 'instance.name' est l'accès à la propriété par l'intermédiaire des mécanismes natifs Swift, alors que' instance.setValue (« Kirk », forKey: « nom ») 'est la clé de codage nécessite valeur (KVC), ce qui ne fonctionne que si les types peuvent être représentés en Objective-C. Comme d'autres l'ont souligné, 'Int! 'Ne peut pas être représenté en Objective-C, donc il ne peut pas participer à KVC. Changez 'age' de' Int! 'À' Int' ou 'NSNumber!', Et ça marchera très bien. (Clairement si vous le changez en 'Int', vous devrez vous assurer qu'il est initialisé à une valeur non-' nil', vraisemblablement avec la méthode 'init' qui prend la valeur en paramètre.) – Rob
Possible duplicate of [Pourquoi? ne puis-je pas utiliser KVC d'un objet Objective-C à une propriété Swift?] (http://stackoverflow.com/questions/35783888/why-can-i-not-use-kvc-from-an-objective-c- object-to-a-swift-property) –