There is an (NS)MeasurementFormatter
class. It inherits from an (NS)Formatter
class. It’s a new class available for iOS 10+ SDK.
I am not sure whether it’s necessary to know, what unit a user has set in their preferences.
To set a Measurement
using Swift 3:
let formatter = MeasurementFormatter()
let measurement = Measurement(value: 24.5, unit: UnitTemperature.celsius)
let temperature = formatter.string(from: measurement)
print(temperature) // 76.1°F
// this value was computed to Fahrenheit value on my locale/preferences
For retrieval of a Measurement
:
print(measurement.unit) // °C - always celsius as it was set as Celsius
formatter.unitStyle = .long
formatter.locale = Locale.current
formatter.string(from: measurement.unit) // degrees Celsius - always an original unit
formatter.string(from: measurement) // 76.1 degrees Fahrenheit - regarding locale/settings
formatter.locale = Locale.init(identifier: "it_IT")
formatter.string(from: measurement.unit) // gradi Celsius - always an original unit
formatter.string(from: measurement) // 24,5 gradi Celsius - regarding locale/settings
The system knows, what unit we have set. It will handle all the value conversion work, because the value was set as a pair of a value and a measurement unit.
For manual conversion:
measurement.converted(to: UnitTemperature.kelvin).value // 297.65
Swift:
https://developer.apple.com/reference/foundation/measurementformatter
Objective-C:
https://developer.apple.com/reference/foundation/nsmeasurementformatter?language=objc
Feel free to correct a grammar.