# Help with swift coding

struct NuclearRocket {
var meters: Double
var liters: Double

``````init(meters: Double, liters: Double) {
self.meters = meters
self.liters = liters

}

// Init for 🇺🇸
init(ft: Double, gallon: Double) {
let convertedMeters = ft / 3.28
let convertedLitter = gallon * 3.78

self.init(meters: convertedMeters, liters: convertedLitter)
}
``````

}

let asdf = NuclearRocket(ft: 1, gallon: 1)
asdf.liters
asdf.meters

thats a.l good for converting feet to metric but how would I switch from metric to feet in the same struct?

Hi @lac_ekim,

Have you looked at using Computed Properties?

Here’s a sample of using computed properties

``````var inLiters: Double {
return liters
}

var inGallons: Double {
return liters / 3.78
}
``````

and you could set up your object as

``````let asdf = NuclearRocket(ft:1, gallon:1)
asdf.inLiters
asdf.inGallons
``````

cheers,

Jayant

thank you for showing how, Jayant

Yeah computed properties are great… although they’re computed.

Which is great in the sense that if you EVER need to change `liters`, `gallons` will automatically be changed.

However it’s also running that math every. single. time.

So if performance is key, consider a separate stored property.

Also, if you want to set gallons in the future as well, computed properties don’t work.

Here’s an example where you get (and set), using stored properties, while still getting the “computed” effect (aka through the `didSet` keyword), without infinite loops (using the `oldValue` check):

``````
class Object {
var meters: Double {
didSet {
if oldValue != meters {
feet = meters * 3.28
}
}
}

var liters: Double {
didSet {
if oldValue != liters {
gallons = liters / 3.78
}
}
}

var feet: Double {
didSet {
if oldValue != feet {
meters = feet / 3.28
}
}
}

var gallons: Double {
didSet {
if oldValue != gallons {
liters = gallons * 3.78
}
}
}

init(meters: Double, liters: Double) {
self.meters = meters
self.liters = liters
feet = meters / 3.28
gallons = liters / 3.78
}

init(gallons: Double, feet: Double) {
self.feet = feet
self.gallons = gallons
meters = feet / 3.28
liters = gallons * 3.78
}
}

let test = Object(gallons: 1, feet: 1)
test.gallons = 4

print(test.feet)
print(test.gallons)
print(test.meters)
print(test.liters)

test.liters = 4

print(test.feet)
print(test.gallons)
print(test.meters)
print(test.liters)

``````

this prints

``````1.0
4.0
0.304878048780488
15.12

1.0
1.05820105820106
0.304878048780488
4.0
``````

WoW thank you for sharing! You guys are the best, TY.
@jayantvarma @personalcompass