我在bugs.swift.org上看到了以下代码。
如果一个协议有一个扩展方法是mutating的,那么一个类实例调用这个mutating函数就没有任何问题。
如果我对协议声明进行小改动以添加方法:
为什么c.m()会一遍又一遍地调用自己?
如果一个协议有一个扩展方法是mutating的,那么一个类实例调用这个mutating函数就没有任何问题。
// protocol definition
protocol P { }
extension P {
mutating func m() { }
}
// class conforming to P
class C : P {
// redeclare m() without the mutating qualifier
func m() {
// call protocol's default implementation
var p: P = self
p.m()
}
}
let c = C()
c.m()
如果我对协议声明进行小改动以添加方法:
protocol P {
mutating func m() // This is what I added.
}
extension P {
mutating func m() { }
}
class C : P {
func m() {
var p: P = self
p.m()
}
}
let c = C()
c.m() // This one is calling itself indefinitely; why?
为什么c.m()会一遍又一遍地调用自己?