簡體   English   中英

有沒有辦法在Swift上的協議上進行默認實現?

[英]Is there a way to make a default implementation on a protocol on Swift?

所以我有這個協議

protocol Syncable {
    func sync()
}

然后我想創建另一個實現第一個協議的協議,但也指定其他函數來實現,如下所示:

protocol Repository:Syncable {

    func propagateTop()
    func propagateLow()

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

因此,以這種方式實現Repository人必須實現這兩個功能,而不需要知道或實現sync

無論如何強迫這個?

我嘗試使Repository成為一個類,並為我想要的每個Repository創建它的子類,但這並不強制每個子類都應該實現這兩個方法。

是的,你可以寫一個extension

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

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

實現Repository的類型將獲得sync()的默認實現。 他們仍然可以提供專門的實施。 但是,該類型將無法在特化中使用默認的Repository.sync

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM