簡體   English   中英

Swift 4 協議擴展——便利初始化器默認實現

[英]Swift 4 protocol extension - convenience initializer default implementation

我試圖弄清楚如何在實現類型可以繼承的協議擴展中創建默認協議初始值設定項實現。

它看起來像這樣:

protocol Initializable {
    associatedtype EntityType: ConcreteClass
    var container: Container<EntityType> { get set }
    init()
}

class Container<T: ConcreteClass> {
    typealias EntityType = T
    let configuration : Configuration

    init(config: Configuration) {
        configuration = config
    }

    func getAll() -> [EntityType] {
        return [EntityType()]
    }
}

extension Initializable {
    init(config: Configuration) {
        self.init()
        self.container = Container<EntityType>(config: config)
    }
}

final class Repo: Initializable {
    typealias EntityType = String
    var container: Container<String>
}

我最終得到以下編譯器錯誤:

“Repo”類型不符合“Initializable”協議。 候選人具有不匹配的類型 'init(type: EntityType.Type)'

您在協議和擴展中使用不同的 init。

init(type: EntityType)

您必須在擴展或類中實現方法 init()

暫無
暫無

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

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