在CoreData中,我正在使用几个类似的属性:
class Taxes: NSManagedObject {
@NSManaged var rateValue: NSDecimalNumber
@NSManaged var typeValue: NSNumber
但是要使用这些属性,我首先必须转换rate
和type
:
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
属性而不必创建一组计算属性。也许有更好的方法可以做到这一点?
答案 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 }
}
}