默认协议实现优先于子类的实现

时间:2018-12-24 10:09:59

标签: swift

请考虑以下内容:

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会正确使用子类的实现。

所以问题实际上是,我能以其他方式做到吗?这是不好的编程习惯吗?

0 个答案:

没有答案