在核心数据中存储测量

时间:2018-09-13 18:51:53

标签: swift core-data

我正在使用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
        }
    }
}

这使我可以按索引存储适用的单位。但是,我宁愿有一个直接返回UnitMassUnitLength的函数。你们中有人有更好的主意吗?另外,尽管以这种方式使用enum使我可以在必要时轻松添加其他单位类型,但是我觉得我在某种程度上复制了Apple的Unit*类,而不仅仅是根据我的需要进行扩充。任何人?感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以将单位和值存储在两个单独的变量中,然后编写返回的计算属性:

enum Return {
    case weight(Int)
    case length(Int)
}

,它提供了更为简单的API。

因为rawValue-enum会生成自己的初始化器init(rawValue: RawValueType)RawValueType=Int here),所以不需要静态初始化器。