Хранение измерений в основных данных - PullRequest
0 голосов
/ 13 сентября 2018

Я сохраняю измерения тела в приложении с использованием Core Data. Эти измерения могут быть типа UnitMass (то есть вес) или UnitLength (то есть рост). В приложении эти измерения передаются с использованием Measurement экземпляров, что позволяет легко конвертировать метрические и британские единицы. В базовых данных значения измерений сохраняются как двойные с использованием единицы измерения 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 таким способом позволяет мне легко добавлять дополнительные типы модулей в случае необходимости, я чувствую, что каким-то образом дублирую классы Unit* Apple, вместо того, чтобы просто расширять их в соответствии с моими потребностями. Кто-нибудь? Спасибо за помощь!

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете сохранить единицу и значение в двух отдельных переменных, а затем записать вычисляемое свойство, возвращающее:

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

, что дает намного более простой API.

Статический инициализатор isnне требуется, поскольку rawValue-enum генерирует собственный инициализатор init(rawValue: RawValueType) (RawValueType=Int here).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...