我在下面有两段代码,第二段将在运行时崩溃,但第一段可以。有人知道那里发生了什么,非常感谢吗?
代码段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")
答案 0 :(得分:1)
setValue forKey进入你的类并使用没有键的键查找getter方法,因此它将查找实例变量。在第一种情况下,它找到变量,因为var prop:Int = 0是一个值为0的存储属性
var prop:Int = { return 0 }()
但在第二种情况下,var prop:Int?是一个Int?,swift可选的计算属性,它不是一个对象,因此不会被检查。将其更改为NSNumber将起作用,因为这是一个对象