rez*_*afi 1 int key-value-coding ios swift
我有这样的对象:
class Human: NSObject {
var name:String!
var age:Int!
}
Run Code Online (Sandbox Code Playgroud)
并从这样的对象生成实例:
let instance = Human()
Run Code Online (Sandbox Code Playgroud)
并设置我的值如下:
instance.name = "Kirk"
instance.age = 87
Run Code Online (Sandbox Code Playgroud)
并打印出来像这样:
print("name: \(instance.name)") // Kirk
print("age: \(instance.age)") //87
Run Code Online (Sandbox Code Playgroud)
一切都好.但是现在用另一种方式设置我的值:
instance.setValue("Kirk", forKey: "name")
instance.setValue(87, forKey: "age")
Run Code Online (Sandbox Code Playgroud)
获取Int dataType的此错误:
***由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥时代的密钥值编码兼容.
为什么会这样?
以及如何解决这个问题,因为我需要使用setValue()函数.
键值编码(KVC)依赖于Objective-C功能,Int!类型在技术上是可选的值类型.可选值类型无法在Objective-C中表示,这就是调用失败的原因.
如果添加显式dynamic属性,则可以看到编译错误:
class Human: NSObject {
var name:String!
dynamic var age: Int!
}
Run Code Online (Sandbox Code Playgroud)
它可以使用Int.
无论如何,在这种情况下使用隐式展开的选项是一个坏主意.您应该将属性作为非选项并在初始化程序中初始化它们.
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |