【发布时间】:2021-01-19 13:00:20
【问题描述】:
我有一个协议,我为其分配了一些默认值:
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.
默认属性是正确的,但函数的默认实现似乎是两者的混合体。
我想知道这里发生了什么?
【问题讨论】:
标签: swift subclassing protocol-oriented