有没有办法在Swift上的协议上进行默认实现?

时间:2016-05-25 17:00:54

标签: swift

所以我有这个协议

protocol Syncable {
    func sync()
}

然后我想创建另一个实现第一个协议的协议,但是还指定了其他要实现的功能:

protocol Repository:Syncable {

    func propagateTop()
    func propagateLow()

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

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

无论如何强迫这个?

我尝试将Repository作为一个类,并为我想要的每个Repository创建它的子类,但这并不强制每个子类都应该实现这两个方法。

1 个答案:

答案 0 :(得分:3)

是的,你可以写一个extension

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

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

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