当我们在swift中调用setvalueForKey时会发生什么

时间:2015-09-23 07:47:52

标签: swift kvc

我在下面有两段代码,第二段将在运行时崩溃,但第一段可以。有人知道那里发生了什么,非常感谢吗?

代码段1:

class TestDemo:NSObject {
    var prop : Int = 0
}
var obj = TestDemo()
obj.setValue(2, forKey: "prop")

代码段2:

class TestDemo:NSObject {
    var prop : Int?
}
var obj = TestDemo()
obj.setValue(2, forKey: "prop")

1 个答案:

答案 0 :(得分:1)

setValue forKey进入你的类并使用没有键的键查找getter方法,因此它将查找实例变量。在第一种情况下,它找到变量,因为var prop:Int = 0是一个值为0的存储属性

var prop:Int = { return 0 }() 

但在第二种情况下,var prop:Int?是一个Int?,swift可选的计算属性,它不是一个对象,因此不会被检查。将其更改为NSNumber将起作用,因为这是一个对象