Ilya Laktyushin e4bd4de246 Various fixes
2024-08-04 20:35:09 +02:00

48 lines
1.5 KiB
Swift

import Foundation
private enum TemperatureUnit {
case celsius
case fahrenheit
var suffix: String {
switch self {
case .celsius:
return "°C"
case .fahrenheit:
return "°F"
}
}
}
private var cachedTemperatureUnit: TemperatureUnit?
private func currentTemperatureUnit() -> TemperatureUnit {
if let cachedTemperatureUnit {
return cachedTemperatureUnit
}
let temperatureFormatter = MeasurementFormatter()
temperatureFormatter.locale = Locale.current
let fahrenheitMeasurement = Measurement(value: 0, unit: UnitTemperature.fahrenheit)
let fahrenheitString = temperatureFormatter.string(from: fahrenheitMeasurement)
var temperatureUnit: TemperatureUnit = .celsius
if fahrenheitString.contains("F") || fahrenheitString.contains("Fahrenheit") {
temperatureUnit = .fahrenheit
}
cachedTemperatureUnit = temperatureUnit
return temperatureUnit
}
private var formatter: MeasurementFormatter = {
let formatter = MeasurementFormatter()
formatter.locale = Locale.current
formatter.unitStyle = .short
formatter.numberFormatter.maximumFractionDigits = 0
return formatter
}()
public func stringForTemperature(_ value: Double) -> String {
let valueString = formatter.string(from: Measurement(value: value, unit: UnitTemperature.celsius)).trimmingCharacters(in: CharacterSet(charactersIn: "0123456789-,.").inverted)
return valueString + currentTemperatureUnit().suffix
}