所以我正在玩这个简单的CoreData实体
import CoreData
class Figure: NSManagedObject {
@NSManaged var approx: NSNumber? // Defined as Boolean type without default value
}
正如您所料,对于一个新的数字,你得到
figure.approx # nil
figure.valueForKey("approx") # nil
但是,如果您定义以下内容(是的,我知道,我可以在数据模型中设置默认值,这不是重点)
var isApprox: Bool {
guard let approx = approx else { return false }
return approx == true
}
然后突然
figure.valueForKey("approx") # false
好吧,对某些(对我而言)神秘的原因,它实际上依赖的是isApprox。我假设它是合成的,并且我在不知不觉中覆盖了它,但是如果你删除isApprox声明并尝试使用KVC调用它,它会崩溃:
figure.valueForKey("isApprox") # Execution was interrupted
如果您有以下内容,请继续:
class Figure: NSManagedObject {
@NSManaged var approx: NSNumber?
var isApproximate: Bool {
guard let approx = approx else { return false }
return approx == true
}
}
现在你得到了
figure.valueForKey("approx") # nil - expected
figure.valueForKey("isApproximate") # false - expected
figure.valueForKey("approximate") # false - where does this one come from?
figure.isApprox # error: value of type 'Figure' has no member 'isApprox'
我无法找到任何关于此的文档,我很想知道发生了什么。
答案 0 :(得分:1)
我认为“键值编码参考手册”中的this article涵盖了您注意到的行为。
具体来说,标题为“valueForKey的默认搜索模式:”的部分表示对于给定的键,valueForKey:将尝试一系列不同的访问器方法,包括“key”和“isKey”(有趣的是,它会在其中任何一个之前尝试“getKey”。