Skip to content

Instantly share code, notes, and snippets.

@vialyx
Last active October 17, 2018 19:55
Show Gist options
  • Save vialyx/367fd894acb1cbd28b4a06aeb64a5a7b to your computer and use it in GitHub Desktop.
Save vialyx/367fd894acb1cbd28b4a06aeb64a5a7b to your computer and use it in GitHub Desktop.
postfix operator ~~~
struct Engine {
var tank: Float
var consumption: Float
var distance: Float
var consumptionTarget: Float?
static prefix func ~ (engine: Engine) -> Engine {
return Engine(tank: engine.tank,
consumption: engine.consumption,
distance: engine.distance,
consumptionTarget: engine.distance / engine.tank)
}
static postfix func ~~~ (engine: Engine) -> Engine {
return Engine(tank: engine.tank,
consumption: engine.consumption,
distance: engine.tank / engine.consumption * 100,
consumptionTarget: engine.consumptionTarget)
}
}
let truck = Engine(tank: 400.0, consumption: 20.0, distance: 1300.0, consumptionTarget: nil)
let calculatedTruck = ~truck
print("target: \(String(describing: calculatedTruck.consumptionTarget))")
/*
target: Optional(3.25)
*/
let maxDistanceTruck = truck~~~
print("max distance: \(String(describing: maxDistanceTruck.distance))")
/*
max distance: 2000.0
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment