首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在核心数据中保存通用Measurement<Unit>?

如何在核心数据中保存通用Measurement<Unit>?
EN

Stack Overflow用户
提问于 2018-01-30 21:42:08
回答 2查看 738关注 0票数 2

如何在核心数据中保存和检索通用测量?

我要做的是保存一个Measurement<UnitMass>或一个Measurement<UnitVolume>

在下图中可以看到,CoreData被设置为接受通用Measurement<Unit>

然而,当我去设置度量的值时,我得到了一个错误。说我不被允许这么做。我认为泛型的目的是支持这样的用法。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-01-30 23:42:21

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

你的选择是

  1. 在保存/读取属性值时,不要保存Measurement、保存其值以及从Measurement进行转换。
  2. 编写您自己的ValueTransformer的自定义子类,用于在Measurement和save之间进行转换

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

更新:使用您的Measurement<UnitMass>案例,我会这样做:

  • 为该属性提供了一个名为massValue.
  • Give的Double属性,该属性是一个名为massUnit的可转换属性,具有自定义类UnitMass (如下所示)。
  • 使用如下所示的方式保存值:

设servingMeasure =测量(value:500,unit:.grams) myObject.massValue = servingMeasure.value myObject.massUnit = servingMeasure.unit

  • Retrieve值,如下所示:

if let单位=测量{ let = myObject.massValue让测量=测量( value :value,unit: unit ) print(“测量:(测量)”) }

下面是massUnit属性的配置方式:

票数 6
EN

Stack Overflow用户

发布于 2018-03-22 19:52:43

在Swift中,测量采用可编码协议,因此可以通过可转换属性将其保存在核心数据中。

你得到的错误实际上是非常清楚的。不能将特定的测量类型Measurement<UnitMass>保存为核心数据中的泛型类型Measurement<Unit>。你也不能在主代码中这样做。修复很简单,对于每个属性,将该属性的特定类型指定为Custom Class。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48522897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档