NS托管和计算的属性

时间:2018-07-05 20:44:01

标签: swift core-data

在CoreData中,我正在使用几个类似的属性:

class Taxes: NSManagedObject {

    @NSManaged var rateValue: NSDecimalNumber
    @NSManaged var typeValue: NSNumber

但是要使用这些属性,我首先必须转换ratetype

    enum Values: Int {
        case high = 2
        case low  = 1
        case none = 0

        init(value: NSNumber) {
            switch value.intValue {
            case 2  : self = .high
            case 1  : self = .low
            default : self = .none
        }
    }

    var rate: Decimal      { return rateValue as Decimal }
    var type: Taxes.Values { return Taxes.Values(value: typeValue) }

这可行,但是我想知道是否有可能使用NSManaged属性而不必创建一组计算属性。也许有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

创建计算属性以映射Swift枚举是通常的方法,因为Core Data不支持Swift枚举类型。

但是,您可以通过将数字值声明为标量类型来缩短代码

class Taxes: NSManagedObject {

    @NSManaged var typeValue: Int32

    enum Values: Int32 {
        case none = 0, low, high
    }

    var type: Taxes.Values { 
        get { return Taxes.Values(rawValue: typeValue)! }
        set { typeValue = newValue.rawValue }
    }
}