首页 > 解决方案 > 在核心数据中存储测量值

问题描述

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

这允许我按索引存储适用的单位。但我宁愿有一个返回UnitMassUnitLength直接返回的函数。你们中有人有更好的主意吗?此外,虽然使用enum这种方式可以让我在必要时轻松添加额外的单元类型,但我觉得我以某种方式复制了 Apples 的Unit*类,而不是仅仅根据我的需要增加它们。任何人?感谢您的帮助!

标签: swiftcore-data

解决方案


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

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

,它提供了一个更简单的 API。

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


推荐阅读