# 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