核心数据Int16为可选

时间:2015-06-04 06:34:04

标签: swift core-data optional

  1. 在Swift中,如何将NSManaged Int16属性设为optional,如下所示:

    NSManaged var durationType: Int16?

    我收到编译错误:roperty cannot be marked @NSManaged because its type cannot be represented in Objective-C

  2. 如果无法做到这一点,并检查Core Data模型编辑器中的optional框,那么如何检查此属性是否具有来自数据库的值?

1 个答案:

答案 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")
    }
}