swift - 在核心数据中存储测量值
问题描述
我正在使用 Core Data 将身体测量值存储在应用程序中。这些测量值可以是类型UnitMass
(即体重)或UnitLength
(即身高)。在应用程序中,这些测量值使用Measurement
实例传递,从而可以轻松地在公制和英制单位之间进行转换。在 Core Data 中,测量值使用单位的baseUnit()
.
但是,我不确定如何将单位存储在数据库中。我想出了这个:
enum BodyMeasurementUnit: Int16 {
case mass = 0
case length
static func unit(for value: Int16) -> BodyMeasurementUnit {
switch value {
case 0: return .mass
default: return .length
}
}
}
这允许我按索引存储适用的单位。但我宁愿有一个返回UnitMass
或UnitLength
直接返回的函数。你们中有人有更好的主意吗?此外,虽然使用enum
这种方式可以让我在必要时轻松添加额外的单元类型,但我觉得我以某种方式复制了 Apples 的Unit*
类,而不是仅仅根据我的需要增加它们。任何人?感谢您的帮助!
解决方案
您可以将单位和值存储在两个单独的变量中,然后编写一个计算属性返回:
enum Return {
case weight(Int)
case length(Int)
}
,它提供了一个更简单的 API。
静态初始化器不是必需的,因为 rawValue-enum 会生成它自己的初始化器init(rawValue: RawValueType)
( RawValueType=Int here
)。
推荐阅读
- tcl - 防止在执行某些部分代码之前重复调用 proc
- .net - Dotnet 发布副本 appsettings*.json 仅适用于 Asp.Net(但不是控制台)
- excel - 结束(Xldown)与结束(xlup)
- android - 为什么在可绘制文件的图层列表中添加图像作为项目会导致图像不缩放/丢失
- caching - 使用 apollo angular 调用 readQuery 后的“不变违规”
- python - ChromeDriver ERR_SSL_PROTOCOL_ERROR 尽管 --ignore-certificate-errors
- java - 无法为实现 Spring Security UserDetails 的类加载请求的类异常
- jax-rs - 自定义 ConstraintValidatior 在 JAX-RS 中执行两次
- python - TypeError:scipy.sparse 矩阵乘法当前不支持对象数组
- c# - 如何设计具有生成 ID 的模型