【发布时间】:2016-11-14 21:59:09
【问题描述】:
protocol A {
func f()
}
struct S1 : A {
func f() {
print("S1")
}
}
struct S2 : A {
func f() {
print("S2")
}
}
let array: [A] = [S1(), S2()]
for s: A in array {
s.f()
}
// "S1\n" "S2\n"
如果这是一个继承层次结构,我希望 Swift 使用 v-table 来查找正确的实现。但是,array 中的具体类型可以是任何实现了A 的类型以及任意数量的其他协议,那么如果 Swift 运行时也使用 v-tables,它如何知道对象的结构呢?
【问题讨论】:
-
Swift 使用“协议见证表”来做到这一点——这个 WWDC 演讲很好地解释了这一点:developer.apple.com/videos/play/wwdc2016-416/?time=1474
-
太棒了,有趣的是,我今天已经打算看那个视频了。 :)
-
正要回复,但是,是的,看那个谈话:)
标签: swift polymorphism method-dispatch