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,它如何知道对象的结构呢?