Контекст:
Я пишу приложение, в котором хочу отображать информацию о пищевой ценности каждого пункта меню.
Я хотел иметь возможность гибкого преобразования используя класс 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
Лучший способ подойти к измерениям с разными типами единиц измерения ⇐ IOS
Программируем под IOS
1716295583
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)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/60644297/best-way-to-approach-measurements-with-different-unittypes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия