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 Measurement .

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 Measurements :

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"