请考虑以下内容:
protocol AProtocol {
func foo()
}
extension AProtocol {
func foo() {
print("extension")
}
}
class SuperClass: AProtocol { }
class SubClass: SuperClass {
func foo() {
print("SubClass")
}
}
let object1: SuperClass = SubClass()
let object2: AProtocol = SubClass()
let object3: SubClass = SubClass()
object1.foo() // prints "extension"
(object1 as? SubClass)?.foo() // prints "SubClass"
object2.foo() // prints "extension"
object3.foo() // prints "SubClass"
因此,我永远无法拥有对象集合,这些对象是具有默认实现的协议类型的子类?我希望至少object2
会正确使用子类的实现。
所以问题实际上是,我能以其他方式做到吗?这是不好的编程习惯吗?