Лучший способ подойти к измерениям с разными типами единиц измеренияIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Лучший способ подойти к измерениям с разными типами единиц измерения

Сообщение Anonymous »

Контекст:

Я пишу приложение, в котором хочу отображать информацию о пищевой ценности каждого пункта меню.
Я хотел иметь возможность гибкого преобразования используя класс Measurement.

Проблема:

Проблема в том, что калории измеряются в Measurement < UnitEnergy > , в то время как другие свойства, такие как белки, измеряются в Measurement . Я решил создать переменную типа Measurement , чтобы она могла обрабатывать оба типа. Но тогда я теряю всякую возможность выполнять преобразования или операции с переменной.

Эта функция выдаст мне ошибку (что имеет смысл, я просто не знаю, что будет лучший способ решить эту проблему)


Бинарный оператор '/' не может быть применен к двум операндам 'Measurement < Unit > '



func getPercentage() -> Double {
return value / property.referenceIntake
}


Если я попытаюсь выполнить приведение, я получу эту ошибку.


Привести из ' Измерение < Unit > ' для несвязанного типа
'Измерение < UnitMass > ' всегда завершается сбоем


if let massUnitMeasurement = value as? Measurement, let referenceMeasurement = property.referenceIntake as? {
....
}


Что у меня есть на данный момент:

struct NutritionInformation {
let property: NutritionProperties
let value: Measurement

var formattedValue: String {
let formatter = MeasurementFormatter()
formatter.unitStyle = .medium
formatter.unitOptions = .providedUnit
return formatter.string(from: value)
}
}

enum NutritionProperties {
case calories
case carbohydrate
case cholesterol
case fat
case saturatedFat
case fibre
case protein
case sodium
case sugar

var unit: Unit {
switch self {
case .calories: return UnitEnergy.kilocalories
case .cholesterol, .sodium: return UnitMass.milligrams
default: return UnitMass.grams
}
}

var referenceIntake: Measurement {
switch self {
case .calories: return Measurement(value: 2000, unit: unit)
case .fat: return Measurement(value: 70, unit: unit)
case .saturatedFat: return Measurement(value: 20, unit: unit)
case .carbohydrate: return Measurement(value: 260, unit: unit)
case .fibre: return Measurement(value: 30, unit: unit)
case .sugar: return Measurement(value: 90, unit: unit)
case .protein: return Measurement(value: 50, unit: unit)
case .sodium: return Measurement(value: 2300, unit: unit)
case .cholesterol: return Measurement(value: 300, unit: unit)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/606 ... -unittypes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»