【发布时间】:2017-11-25 22:59:13
【问题描述】:
我遇到了以下代码(Swift 3.1)中解释的问题:
protocol MyProtocol {
func methodA()
func methodB()
}
extension MyProtocol {
func methodA() {
print("Default methodA")
}
func methodB() {
methodA()
}
}
// Test 1
class BaseClass: MyProtocol {
}
class SubClass: BaseClass {
func methodA() {
print("SubClass methodA")
}
}
let object1 = SubClass()
object1.methodB()
//
// Test 2
class JustClass: MyProtocol {
func methodA() {
print("JustClass methodA")
}
}
let object2 = JustClass()
object2.methodB()
//
// Output
// Default methodA
// JustClass methodA
所以我希望 "SubClass methodA" 文本应该在object1.methodB() 调用之后打印。但是由于某种原因,调用了来自协议扩展的methodA() 的默认实现。但是object2.methodB()call 可以正常工作。
这是协议方法调度中的另一个 Swift 错误,还是我遗漏了一些东西并且代码可以正常工作?
【问题讨论】:
标签: swift inheritance protocols dynamic-dispatch protocol-witness-table