protocol Drawable { | |
func draw() | |
} | |
func drawACopy(local: Drawable) { | |
local.draw() | |
} | |
let line = Line() | |
drawACopy(line) | |
let point = Point() | |
drawACopy(point) |
func drawACopy<T: Drawable>(local: T) { | |
local.draw() | |
} | |
... |
func foo<T: Drawable>(local: T) { | |
bar(local) | |
} | |
func bar<T: Drawable>(local: T) { ... } | |
let point = Point(...) | |
foo(point) |
This: | |
```swift | |
let point = Point(...) | |
foo<T = Point>(point) | |
``` | |
Becomes this: | |
```swift | |
bar<T = Point>(point) | |
``` |
func drawACopy<T: Drawable>(local: T) { | |
local.draw() | |
} | |
drawACopy(Point(...)) |
func drawACopy<T: Drawable>(local: T, pwt: T.PWT, vwt: T.VWT) {...} | |
drawACopy(Point(...), Point.pwt, Point.vwt) |
func drawACopy<T: Drawable>(local: T) { | |
local.draw() | |
} | |
drawACopy(Point(...)) | |
drawACopt(Line(...)) |
func drawACopyOfPoint(local: Point) { | |
local.draw() | |
} | |
func drawACopyOfLine(local: Line) { | |
local.draw() | |
} | |
drawACopy(Point(...)) | |
drawACopt(Line(...)) |
Point(...).draw() | |
Line(...).draw() |
struct Pair { | |
let fst: Drawable | |
let snd: Drawable | |
} | |
let pair = Pair(fst: Line(...), snd: Line(...)) |
struct Pair<T: Drawable> { | |
let fst: T | |
let snd: T | |
} |
let pair = Pair(Point(...), Point(...)) |