Measurement and Unit conversion in Swift

In this Swift programming tutorial, you will learn about the Measurement struct and how to use it to convert one unit from another unit of the same type.

You may need to convert one unit to another while developing an iOS app. It can be done by using a unit conversion formula. We can do it by ourselves if we know the formula of conversion. But doing this can be complicated and we need to know the formula.

Luckily there is a built-in structure Measurement provided by Apple that can help us with conversion between units.

It can help us to convert the unit in an effective way. We have to write less amount of code. The interesting part is that we don’t even need to know the formula.

For example, you can convert temperature units from Fahrenheit to Celcius and vice versa or from Celcius to kelvin and vice versa and so on for length, area, volume, etc using the Measurement struct. But it has to be the same type. For example, You can not perform the conversion between a unit of length and a unit of volume.

The Measurement is part of the Foundation framework of Swift. So you must import the Foundation framework before using the Measurement struct.

Syntax to create an instance of Measurement

Below is given the syntax to create an instance of the Measurement struct in Swift:

let myUnitValue = Measurement(value: DOUBLE_VALUE, unit: UNIT_TYPE.UNIT)

In the above syntax, myUnitValue is the variable or in this case the name of the constant to store the instance of the Measurement unit type. DOUBLE_VALUE is the value of the unit in type double. UNIT_TYPE is the type of unit and UNIT is the unit of Measurement.

Conversion of units using Measurement

Let’s first start with a simple example.

Suppose the height of a wall is 8 feet. You can create an instance of Measurement for this height with type length:

import Foundation

let wallHeightInFeet = Measurement(value: 8, unit: UnitLength.feet)

In the above program, the UnitLength.feet is the unit for length. You can’t write .feet here as there are other subclasses. The UnitLength class has many other units for length.

To convert the above unit into inches below is the given code:

import Foundation

let wallHeightInInches = wallHeightInFeet.converted(to: UnitLength.inches)

Below we are converting the unit of length to other units of length from feet:

import Foundation

let wallHeightInFeet = Measurement(value: 8, unit: UnitLength.feet)

let wallHeightInMeters = wallHeightInFeet.converted(to: UnitLength.meters)

let wallHeightInKilometers = wallHeightInFeet.converted(to: UnitLength.kilometers)

let wallHeightInCentimeters = wallHeightInFeet.converted(to: UnitLength.centimeters)

let wallHeightInMillimeters = wallHeightInFeet.converted(to: UnitLength.millimeters)

Below is another example where we are converting the gram unit to other units of mss.

import Foundation

let weightInKg = Measurement(value: 13, unit: UnitMass.kilograms)

let weightInGram = weightInKg.converted(to: UnitMass.grams)

let weightInMilligram = weightInKg.converted(to: UnitMass.milligrams)

let weightInDecigram = weightInKg.converted(to: UnitMass.decigrams)

In the same way, you can perform the conversion task between other units. Here is an example of converting Fahrenheit to Celsius and vice versa using the Measurement.

Some facts about Measurement

Now let’s look at some interesting facts about Swift Measurement that are useful for app developers:

  • Measurement type supports the comparison between two measurements of the same types of units using these operators:
    ==, !=, <, <=, > and >=
  • Just like any other adding and subtracting operations, two Measurements with units of the same types also can be added or substracts using the + and - operators.
  • You can perform multiplication and division by a double value by using * and / operators.
  • It is possible to use ranges using ... and ..<.