Нужны как Цельсий, так и Фаренгейт с WeatherKit
У меня есть погодное приложение, которое показывает температуру в градусах Цельсия и Фаренгейта одновременно. Я хотел бы использовать WeatherKit, но у меня возникли проблемы с округлением градусов Цельсия до десятичных знаков. Я могу сделать это с Фаренгейтом с .formatted, потому что я живу в США, но я не могу одновременно округлять по Цельсию. Есть ли простой способ сделать это в SwiftUI? Или можно вручную установить локаль только для одного свойства?
if let weather{
let celsiusWeather = weather.currentWeather.temperature.converted(to: .celsius).description
VStack{
Text("New York")
.font(.largeTitle)
Text("\(weather.currentWeather.temperature.converted(to: .fahrenheit).formatted().description)")
Text(celsiusWeather)
}
}
}
Этот текущий код подходит к нему наполовину:
Нью-Йорк 45°F 5,98°C
Но я бы хотел, чтобы вместо этого было просто 6°C. Я пробовал интерполяцию строк:
let celsiusFormatted = String(format: "%.0f", celsiusWeather)
и это только что выдало 0, даже не температуру, так что я не уверен, может ли он это сделать из-за WeatherKit или нет.
Любая помощь будет здорово. Дайте мне знать, если вам нужно больше кода, чтобы уточнить.
2 ответа
Вы можете отформатировать температуру, используяMeasurementFormatter
. Не забудьте установитьnumberFormatter.maximumFractionDigits = 0
округлить число до необходимого иunitOptions = .providedUnit
чтобы убедиться, что отображаются правильные единицы измерения.
struct ContentView: View {
let temp: Measurement<UnitTemperature>
var body: some View {
VStack {
HStack {
Text("New York")
Text(temp, formatter: formatter)
Text(temp.converted(to: .celsius), formatter: formatter)
}
}
}
var formatter: MeasurementFormatter {
let formatter = MeasurementFormatter()
formatter.unitStyle = .medium
formatter.numberFormatter.maximumFractionDigits = 0
formatter.unitOptions = .providedUnit
return formatter
}
}
Пытаться
let celsiusFormatted = String(format: "%.0f", celsiusWeather.value)
celsiusWeather
представляется измерением, а неvalue
измерения представляет собойDouble
.
Вы также можете включить точность дляText
Text(weather.currentWeather.temperature.converted(to: .celsius), format: .measurement(width: .abbreviated, usage: .asProvided,numberFormatStyle: .number.precision(.fractionLength(2))))