在Swift中,如何将NSManaged Int16
属性设为optional
,如下所示:
NSManaged var durationType: Int16?
我收到编译错误:roperty cannot be marked @NSManaged because its type cannot be represented in Objective-C
如果无法做到这一点,并检查Core Data模型编辑器中的optional
框,那么如何检查此属性是否具有来自数据库的值?
答案 0 :(得分:4)
您可以将该属性设为可选,并将其保留为Int16
。关键是@NSManaged
不是必需的,但如果删除它,必须实现您自己的访问方法。
一种可能的实施方式:
var durationType: Int16?
{
get {
self.willAccessValueForKey("durationType")
let value = self.primitiveValueForKey("durationType") as? Int
self.didAccessValueForKey("durationType")
return (value != nil) ? Int16(value!) : nil
}
set {
self.willChangeValueForKey("durationType")
let value : Int? = (newValue != nil) ? Int(newValue!) : nil
self.setPrimitiveValue(value, forKey: "durationType")
self.didChangeValueForKey("durationType")
}
}