我有一个协议,我为其分配了一些默认值:
protocol HigherProtocol {
var level: Int { get }
func doSomething()
}
extension HigherProtocol {
var level: Int { 10 }
func doSomething() {
print("Higher level is \(level)")
}
}
然后我有另一个符合更高级别协议的协议,但具有不同的默认值和功能实现:
protocol LowerProtocol: HigherProtocol {}
extension LowerProtocol {
var level: Int { 1 }
func doSomething() {
print("Lower level is \(level)")
}
}
然后我创建一个符合更高层协议的类,然后创建一个符合低层协议的子类:
class HigherClass: HigherProtocol {}
class LowerClass: HigherClass, LowerProtocol {}
但是,当我实例化这个较低的类时,它会显示一些奇怪的行为:
let lowerClass = LowerClass()
lowerClass.level // is 1
lowerClass.doSomething() // Prints "Lower level is 10" to the console.
默认属性是正确的,但函数的默认实现似乎是两者的混合。
我想知道这里发生了什么?