У меня есть протокол, которому я присвоил некоторые значения по умолчанию:
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)")
}
}
Затем я создаю класс, соответствующий HigherProtocol, а затем подкласс, соответствующий протоколу более низкого уровня:
class HigherClass: HigherProtocol {}
class LowerClass: HigherClass, LowerProtocol {}
Однако когда я создаю экземпляр этого более низкого класса, он показывает странное поведение:
let lowerClass = LowerClass()
lowerClass.level // is 1
lowerClass.doSomething() // Prints "Lower level is 10" to the console.
Свойство по умолчанию правильное, но реализация функции по умолчанию кажется гибридом двух.
Мне интересно, что здесь происходит?