Skip to content

Instantly share code, notes, and snippets.

@abijlani
Created June 5, 2014 21:00
Show Gist options
  • Save abijlani/8e2aaae1b4f38425fa74 to your computer and use it in GitHub Desktop.
Save abijlani/8e2aaae1b4f38425fa74 to your computer and use it in GitHub Desktop.
Unit Conversion
enum Unit: Int {
case Millimeters, Centimeters, Meters, Kilometers, Inches, Feet
func baseUnit() -> Double {
switch self {
case .Millimeters:
return 0.001
case .Centimeters:
return 0.01
case .Meters:
return 1.0
case .Kilometers:
return 1000
case .Inches:
return 0.0254
case .Feet:
return 0.3048
default:
return 1.0
}
}
func simpleDescription() -> String {
switch self {
case .Millimeters:
return "Millimeters"
case .Centimeters:
return "Centimeters"
case .Meters:
return "Meters"
case .Kilometers:
return "Kilometers"
case .Inches:
return "Inches"
case .Feet:
return "Feet"
}
}
}
class Distance {
var value: Double = 0.0
var unit: Unit
init (value: Double, unit: Unit) {
self.value = value
self.unit = unit
}
func convertTo(to: Unit) -> Distance {
let convertedValue = (self.value * self.unit.baseUnit()) / to.baseUnit()
return Distance(value: convertedValue, unit: to)
}
}
var meters = Distance(value: 1000, unit: Unit.Meters)
var kilometers = meters.convertTo(Unit.Kilometers)
println("\(meters.value) \(meters.unit.simpleDescription()) == \(kilometers.value) \(kilometers.unit.simpleDescription())")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment