Swift 核心数据Int16是可选的
在Swift中,如何将Swift 核心数据Int16是可选的,swift,core-data,optional,Swift,Core Data,Optional,在Swift中,如何将NSManaged Int16属性设置为可选,如下所示: NSManaged var durationType:Int16? 我收到编译器错误:property无法标记为@NSManaged,因为它的类型不能在Objective-C中表示 如果这是不可能的,并且我选中了Core Data model editor中的optional框,那么如何检查该属性在来自数据库时是否具有值 您可以将属性设置为可选,并将其保持为Int16。关键是不需要@NSManaged,但如果删除它,
NSManaged Int16
属性设置为可选
,如下所示:
NSManaged var durationType:Int16?
我收到编译器错误:property无法标记为@NSManaged,因为它的类型不能在Objective-C中表示
如果这是不可能的,并且我选中了Core Data model editor中的optional
框,那么如何检查该属性在来自数据库时是否具有值
您可以将属性设置为可选,并将其保持为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")
}
}
可以用returnmap(value){Int16($0)}
和let value=map(newValue){Int($0)}
替换条件表达式。也许是口味的问题,但是避免了使用强制展开操作符。谢谢Tom。这意味着为数据模型中的许多属性实现访问器,这需要编写大量代码。如果我仍然想使用@NSManaged,有没有办法检查该属性的核心数据是否存储为NULL?您可以使用上面使用的相同的primitiveValueForKey
调用检查nil。上面的get
访问器只加载值并检查它是否为nil,如果需要,您可以在其他地方执行相同的操作。