>我有这样的对象:
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(( 函数。
键值编码(KVC(依赖于Objective-C功能,Int!
类型在技术上是一种可选的值类型。可选值类型不能在Objective-C中表示,这就是调用失败的原因。
如果添加显式 dynamic
属性,则可以看到编译错误:
class Human: NSObject {
var name:String!
dynamic var age: Int!
}
它将与Int
一起使用.
在这种情况下,使用隐式解包的可选无论如何都是一个坏主意。应将属性设置为非可选属性,并在初始值设定项中初始化它们。
Int!
不能像其他提到的那样表示int Objective-C。这应该有效
class Human: NSObject {
var name:String!
var age : Int;
init(name:String?, age:Int) {
self.age = age
self.name = name
}
}