如何在核心数据中保存和检索通用度量?
我要做的是保存aMeasurement<UnitMass>或aMeasurement<UnitVolume>
如下图所示,coredata设置为接受泛型Measurement<Unit>
swift - 如何在核心数据中保存通用度量单位?-LMLPHP
但是,当我去设置度量值时,我得到了一个错误。说我不能这么做。我认为泛型的目的是支持这样的使用。
我错过了什么?
swift - 如何在核心数据中保存通用度量单位?-LMLPHP

最佳答案

不匹配类型的错误在这里并不重要。真正的问题是,可转换属性只适用于符合NSCoding的类,或者您为其编写了自己的自定义值转换器。因为Measurement不是一个类并且不符合NSCoding,所以不能将其与可转换属性一起使用。
你的选择是
保存/读取属性值时,不要保存Measurement,保存其值,并转换为或从Measurement转换。
编写您自己的ValueTransformer自定义子类,它将在MeasurementData之间转换。
我会选择1。可以在托管对象子类上添加方便方法来处理转换。
更新:使用您的Measurement<UnitMass>案例,我将执行以下操作:
给属性一个名为DoublemassValue属性。
使用自定义类给属性指定一个名为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 - 如何在核心数据中保存通用度量单位?-LMLPHP

关于swift - 如何在核心数据中保存通用度量单位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48522897/

10-12 19:18