如何在swift中调用协议中的默认实现代码?

时间:2017-04-01 15:45:39

标签: swift syntax

我在协议扩展中给出了一些默认的实现代码。但是如何在确认协议的类中调用此指定代码。这是一个例子:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1 个答案:

答案 0 :(得分:2)

协议更像是编译时保证类型具有某些方法和属性。默认实现通过向协议的采用者注入实现来为此增加另一层复杂性。我没有掌握Swift源代码的技能,但我认为当采用者提供自己的实现时,默认实现会黯然失色,而且无法将其恢复。

解决方法是为协议添加一个具有不同名称的方法,该方法提供默认实现,并且可由任何采用者调用:

protocol ImplementedProtocol {
    func printInfo()

    func defaultPrintInfo()
}

extension ImplementedProtocol where Self: BaseClass {
    func printInfo() {
        defaultPrintInfo()
    }

    func defaultPrintInfo() {
        print("Hello! This is ImplementedProtocol")
    }
}

class SuperClass: BaseClass, ImplementedProtocol {
    func printInfo() {
        self.defaultPrintInfo()
        print("Hello! This is SuperClass")
    }
}