在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属性而不必创建一组计算属性。或许有更好的方法可以做到这一点?

最佳答案

创建计算属性以映射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 }
    }
}

10-06 01:10