swift - 有没有办法在 Swift 中对协议(protocol)进行默认实现?

标签 swift

所以我有这个协议(protocol)

protocol Syncable {
    func sync()
}

然后我想创建另一个协议(protocol)来实现第一个协议(protocol),但也指定要实现的其他功能,如下所示:

protocol Repository:Syncable {

    func propagateTop()
    func propagateLow()

    override func sync() {
        propagateTop()
        propagateLow()
    }
}

因此,通过这种方式,实现Repository 的人必须实现这两个功能,而无需了解或实现sync 功能。

有没有办法强制执行此操作?

我试着让 Repository 成为一个类,并为我想要的每个 Repository 创建它的子类,但这并不强制每个子类都应该实现这 2 个方法。

最佳答案

是的,你可以写一个扩展:

protocol Repository: Syncable {
    func propagateTop()
    func propagateLow()
}

extension Repository {
    func sync() {
        propagateTop()
        propagateLow()
    }
}

实现Repository 的类型将获得sync() 的默认实现。他们仍然可以提供专门的实现。但是,该类型将无法在特化中使用默认的 Repository.sync

关于swift - 有没有办法在 Swift 中对协议(protocol)进行默认实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443476/

相关文章:

swift - 如何使用 Swift 检测链表中的循环/周期

ios - ios中的六边形网格

ios - 如何在 swift ios 中对齐表格 View 单元格中的文本

swift - 当委托(delegate)是 Swift 中的 UIViewController 时使用委托(delegate)的方法

ios - Swift App 中出现不同的 Realm 配置

ios - 即使已取消并设置为Nil,Swift iOS -DispatchWorkItem仍在运行

iOS 13 UIToolBar 风格

ios - UITableView 中的数据在特定情况下不会刷新

ios - 如何在 Swift 中以编程方式设置 UITableView 单元格高度?

Xcode Swift 编译器警告永远不会被执行