【发布时间】:2017-05-22 09:17:41
【问题描述】:
我有这样的对象:
class Human: NSObject {
var name:String!
var age:Int!
}
然后像这样从对象中创建实例:
let instance = Human()
并像这样设置我的值:
instance.name = "Kirk"
instance.age = 87
然后像这样打印出来:
print("name: \(instance.name)") // Kirk
print("age: \(instance.age)") //87
一切正常。但现在以另一种方式设置我的值:
instance.setValue("Kirk", forKey: "name")
instance.setValue(87, forKey: "age")
Int 数据类型出现此错误:
*** 由于未捕获的异常 'NSUnknownKeyException' 导致应用程序终止,原因:'[ setValue:forUndefinedKey:]: this 类不符合键年龄的键值编码。
为什么会这样?
以及如何解决这个问题,因为我需要使用 setValue() 函数。
【问题讨论】:
-
区别在于
instance.name是通过原生Swift机制访问属性,而instance.setValue("Kirk", forKey: "name")需要键值编码(KVC),只有当类型可以在Objective-C中表示时才有效.正如其他人指出的那样,Int!不能在 Objective-C 中表示,因此它不能参与 KVC。将age从Int!更改为Int或NSNumber!,它将正常工作。 (很明显,如果将其更改为Int,则需要确保将其初始化为非nil值,大概是使用将值作为参数的init方法。)
标签: ios swift int key-value-coding