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使用虚函数表来查找正确的实现。然而,在array
中的具体类型可能是任何实现A
以及任意数量其他协议的类型,那么如果Swift也在使用虚函数表,Swift运行时如何知道对象的结构呢?