Apple added something pretty neat to Foundation this year: Measurements. We can represent units, convert them to other units, compare them, and even convert them into formatted strings. Let's dive in.
It all starts with a
let fuel = Measurement(value: 184, unit: UnitVolume.liters)
There are tons of different categories of units such as Volume, Mass, Speed, Power, Length, and many more.
Once created, a
Measurement can be converted into any of other units in its category:
print(fuel.converted(to: .gallons)) // "8.18933748259766 gal"
We can also perform mathematical operations and comparisons on
let tripLegA = Measurement(value: 1.4, unit: UnitLength.lightyears) let tripLegB = Measurement(value: 2.3, unit: UnitLength.lightyears) let tripTotal = tripLegA + tripLegB print(tripTotal) // "3.7 ly" print(tripLegA > tripLegB) // "false"
Last but certainly not least, we can nicely format a measurement into a String. Apple provides a
MeasurementFormatter type that is fully locale-aware. This allows us to easily display
Measurements in our apps in whichever ways our users expect.
let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "en_US") formatter.string(from: tripTotal) // "21,751,587,607,342.14 mi" formatter.locale = Locale(identifier: "fr") formatter.string(from: tripTotal) // "35 005 700 000 000 km"
Foundation is such a powerhouse of functionality, it can be easy to miss great new additions like this. Next time, we'll learn more about formatting
Measurements for display in our apps.