Consider another example:
class Distance { var miles = 0.0 var km: Double { get { return 1.60934 * miles } set (km) { miles = km / 1.60934 } } }
Here, you have the Distance class.
It has a stored property named miles.
You have a km computed property.
The km computed property enables you to retrieve the distance in kilometers:
class Distance { var miles = 0.0 var km: Double { get {/*from www . j a v a 2 s . co m*/ return 1.60934 * miles } set (km) { miles = km / 1.60934 } } } var d = Distance () d.miles = 10.0 print(d.km) //16.0934
It also enables you to store a distance in kilometers:
d.km = 20.0
print(d.miles) //12.4274547329961
Here, the actual distance is stored in miles, not kilometers.
That way, you only need to store the distance once.
To support yards, you just need to add the computed property as shown here:
class Distance { var miles = 0.0 var km: Double { get { return 1.60934 * miles } set (km) { miles = km / 1.60934 } } var yard:Double { get{ return miles * 1760 } set (yard) { miles = yard / 1760 } } } var d = Distance () d.miles = 10.0 print(d.km) //16.0934 d.miles = 1.0 print(d.yard) //1760.0 d.yard = 234567 print(d.miles) //133.276704545455