【发布时间】:2016-02-16 17:27:14
【问题描述】:
所以我在玩这个简单的 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'
我找不到任何关于此的文档,我很想了解发生了什么。
【问题讨论】:
标签: swift core-data boolean kvc