我遇到了以下代码(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()
但是由于某种原因,调用了 from 协议扩展的默认实现。但是object2.methodB()
呼叫按预期工作。
它是协议方法调度中的另一个 Swift 错误,还是我遗漏了一些东西并且代码正常工作?