gpt4 book ai didi

swift - 如何在核心数据中保存通用测量

转载 作者:搜寻专家 更新时间:2023-11-01 06:14:13 25 4
gpt4 key购买 nike

如何在 Core Data 中保存和检索通用度量值?

我要做的是保存 Measurement<UnitMass>Measurement<UnitVolume> .

如下图所示,CoreData 设置为接受通用 Measurement<Unit>

Generic Measurement in Core Data

但是,当我设置度量值时出现错误。说我不允许这样做。我认为泛型的目的是支持这样的用途。

我错过了什么?

enter image description here

最佳答案

关于不匹配类型的错误不是这里的重要部分。真正的问题是可转换属性只适用于符合 NSCoding 的类。或者您为其编写了自己的自定义值转换器。自 Measurement不是一个类,不符合 NSCoding ,您不能将它与可转换属性一起使用。

你的选择是

  1. 不要保存 Measurement ,保存其值,并转换为/自 Measurement保存/读取属性值时。
  2. 编写您自己的 ValueTransformer 的自定义子类这将在 Measurement 之间转换和 Data .

我会选择#1。您可以在托管对象子类上添加便利方法来处理转换。

更新:使用您的 Measurement<UnitMass>情况下,我会做类似的事情:

  • 给属性一个Double属性名为 massValue .
  • 为该属性提供一个名为 massUnit 的可转换属性带有自定义类 UnitMass (见下文)。
  • 像这样保存值:

    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)")
    }

这就是 massUnit 的方式属性已配置:

enter image description here

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com