Это сводит меня с ума, хотелось бы помощи. Я использую измерения в SwiftUI, и мне нужно преобразовать миллилитры в чашки. Преобразование работает нормально, но я не могу заставить единицу измерения отображаться в виде чашек, она продолжает отображаться как c, что сбивает с толку, так как это выглядит как градус Цельсия.
емкостьArray — это массив целых чисел, которые представляют собой значения в миллилитрах. например [100, 250, 450]
let capacity = Measurement(value: Double(capacityArray[0]), unit: UnitVolume.milliliters)
Text("* Capacity: \(capacity.converted(to: .cups).toString())")
Result:
* Capacity: 0.85 c
Мое быстрое решение заключалось в добавлении «вверхов» в конец строки, но это усложняет локализацию.
Text("* Capacity: \(capacity.converted(to: .cups).toString())ups")
Result:
* Capacity: 0.85 cups
Буду признателен за любую оказанную помощь.





Вы можете попробовать этот подход, используя .value.magnitude и .unit.symbol, как показано в примере кода:
struct ContentView: View {
let capacityArray = [100, 250, 450]
var body: some View {
ForEach(capacityArray, id: \.self) { val in
let capacity = Measurement(value: Double(val), unit: UnitVolume.milliliters)
let cup = capacity.converted(to: .cups)
HStack {
Text("value: \(cup.value.magnitude)")
Text(" \(cup.unit.symbol)")
}
// Text("Capacity: \(cup.description)") // basic alternative
}
}
}
Обратите внимание: поскольку у вас есть capacityArray в milliliters, существует также тип .metricCups.
Вы не показываете реализацию toString, но, возможно, проблема в этом. Вам необходимо указать правильные аргументы для форматирования измерения, и тогда система сможет позаботиться о таких вещах, как локализация, за вас.
let capacity = Measurement(value: 100, unit: UnitVolume.milliliters)
let style = Measurement<UnitVolume>.FormatStyle
.measurement(
width: .wide,
usage: .asProvided,
numberFormatStyle: .number.precision(.fractionLength(0...2))
)
print(capacity.formatted(style))
print(capacity.converted(to: .cups).formatted(style))
дает
100 millilitres
0.42 cups
width: .wide сообщает форматтеру использовать самое длинное описание единицы. usage: .asProvided сообщает ему, что не следует конвертировать в местные единицы измерения.
Спасибо, это отлично работает. Это также работает с локализацией. Ваше здоровье.