我正在使用Core Data将人体测量结果存储在应用程序中。这些测量值可以是UnitMass
(即重量)或UnitLength
(即高度)类型。在应用程序中,这些测量是使用Measurement
实例传递的,从而可以轻松在公制和英制单位之间进行转换。在核心数据中,使用单位的baseUnit()
将测量值存储为Doubles。
但是,我不确定如何在数据库中存储单位。我想到了这个:
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
使我可以在必要时轻松添加其他单位类型,但是我觉得我在某种程度上复制了Apple的Unit*
类,而不仅仅是根据我的需要进行扩充。任何人?感谢您的帮助!
答案 0 :(得分:0)
您可以将单位和值存储在两个单独的变量中,然后编写返回的计算属性:
enum Return {
case weight(Int)
case length(Int)
}
,它提供了更为简单的API。
因为rawValue-enum会生成自己的初始化器init(rawValue: RawValueType)
(RawValueType=Int here
),所以不需要静态初始化器。