简体   繁体   English

快速覆盖扩展方法

[英]Swift overriding extension method

I am looking a way to override base class extension method in subclass. 我正在寻找一种方法来重写子类中的基类扩展方法。 As per my knowledge swift doesn't allow to do this directly. 据我所知,swift不允许直接执行此操作。 This method is protocol method. 此方法是协议方法。 Is there any way to achieve this? 有什么办法可以做到这一点?

protocol Creator {
    func create()
}
class BaseClass {

}

extension BaseClass: Creator {

    func create() {
        print("create")
    }
}

class Subclass1: BaseClass {
    // override create method
    // add own implementation of create()
}

class Subclass2 : BaseClass {
    // override create method
    // add own implementation of create()
}

let subclass1 = Subclass1().create() // execute create from Subclass1
let subclass2 = Subclass2().create() // execute create from Subclass2

Just move the declaration of create into the actual class declaration. 只需将create声明移到实际的类声明中即可。 Everything else can stay the same: 其他一切都可以保持不变:

protocol Creator {
    func create()
}
class BaseClass {
    func create() {
        print("create")
    }
}
extension BaseClass: Creator {
}
// and so on

The effect is precisely the same, but now override func create() is legal in your subclasses. 效果是完全一样的,但是现在override func create()在您的子类中是合法的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM