protocol Drawable { func draw() }
struct Point: Drawable {
var x, y: Double
func draw() { }
}
struct Line: Drawable {
var x1, y1, x2, y2: Double
func draw() {}
}
var drawables: [Drawable] = []
for d in drawables {
d.draw()
}
class SharedLine: Drawable {
var x1, y1, x2, y2: Double
func draw() {
// ...
}
}
여전히 우리 코드는 다형성이 유지가 되고 있다. 하지만 이전과 비교했을 때 한가지 다른 점이 있다.
value type인 struct Line
과 struct Point
는 V-Table dispatch
에 필요한 공통 상속 관계(common inheritance relationship)를 공유하지 않는다.
답은 **Protocol Witness Table(PWT)
**이라고 하는 테이블 기반 메커니즘을 통해서 dispatch한다.
하지만 아직도 의문이 남는다..