如何在核心数据中保存和检索通用度量?
我要做的是保存aMeasurement<UnitMass>
或aMeasurement<UnitVolume>
。
如下图所示,coredata设置为接受泛型Measurement<Unit>
但是,当我去设置度量值时,我得到了一个错误。说我不能这么做。我认为泛型的目的是支持这样的使用。
我错过了什么?
最佳答案
不匹配类型的错误在这里并不重要。真正的问题是,可转换属性只适用于符合NSCoding
的类,或者您为其编写了自己的自定义值转换器。因为Measurement
不是一个类并且不符合NSCoding
,所以不能将其与可转换属性一起使用。
你的选择是
保存/读取属性值时,不要保存Measurement
,保存其值,并转换为或从Measurement
转换。
编写您自己的ValueTransformer
自定义子类,它将在Measurement
和Data
之间转换。
我会选择1。可以在托管对象子类上添加方便方法来处理转换。
更新:使用您的Measurement<UnitMass>
案例,我将执行以下操作:
给属性一个名为Double
的massValue
属性。
使用自定义类给属性指定一个名为massUnit
的可转换属性(见下文)。
使用以下内容保存值:
let servingMeasure = Measurement<UnitMass>(value:500, unit:.grams)
myObject.massValue = servingMeasure.value
myObject.massUnit = servingMeasure.unit
使用以下内容检索值:
if let unit = myObject.massUnit {
let value = myObject.massValue
let measurement = Measurement<UnitMass>(value:value, unit:unit)
print("Measurement: \(measurement)")
}
这就是
UnitMass
属性的配置方式:关于swift - 如何在核心数据中保存通用度量单位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48522897/