Skip to content

Instantly share code, notes, and snippets.

@ohtwo
Forked from nubbel/Swift: Meter conversion using double literals
Last active December 1, 2016 09:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ohtwo/7d4203b2799cbbd475d732dee5ab8ea9 to your computer and use it in GitHub Desktop.
Save ohtwo/7d4203b2799cbbd475d732dee5ab8ea9 to your computer and use it in GitHub Desktop.
Support Swift 3
import Foundation
public struct Meter {
fileprivate var value: Double
public init(_ value: Double) {
self.value = value
}
public init(_ value: Int) {
self.value = Double(value)
}
public var mm: Double { return value * 1000.0 }
public var km: Double { return value / 1000.0 }
}
extension Meter : ExpressibleByFloatLiteral {
public init(floatLiteral value: Double) {
self = Meter(value)
}
}
extension Meter : ExpressibleByIntegerLiteral {
public init(integerLiteral value: Int) {
self = Meter(Double(value))
}
}
extension Meter : CustomStringConvertible {
public var description: String {
return value.description
}
}
extension Meter : CustomDebugStringConvertible {
public var debugDescription: String {
return value.debugDescription
}
}
extension Meter : LosslessStringConvertible {
public init?(_ text: String) {
if let doubleValue = Double(text) {
self = Meter(doubleValue)
} else {
return nil
}
}
}
prefix public func +(x: Meter) -> Meter {
return Meter(x.value)
}
prefix public func -(x: Meter) -> Meter {
return Meter(-x.value)
}
public func +(lhs: Meter, rhs: Meter) -> Meter {
return Meter(lhs.value + rhs.value)
}
public func -(lhs: Meter, rhs: Meter) -> Meter {
return Meter(lhs.value - rhs.value)
}
public func *(lhs: Meter, rhs: Meter) -> Meter {
return Meter(lhs.value * rhs.value)
}
public func /(lhs: Meter, rhs: Meter) -> Meter {
return Meter(lhs.value / rhs.value)
}
public func +=(lhs: inout Meter, rhs: Meter) {
return lhs.value += rhs.value
}
public func -=(lhs: inout Meter, rhs: Meter) {
return lhs.value -= rhs.value
}
public func *=(lhs: inout Meter, rhs: Meter) {
return lhs.value *= rhs.value
}
public func /=(lhs: inout Meter, rhs: Meter) {
return lhs.value /= rhs.value
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment