タイプを実装できるプロトコル拡張でデフォルトのプロトコルイニシャライザ実装を作成する方法を理解しようとしています。Swift 4プロトコル拡張 - 簡易イニシャライザのデフォルト実装
それは、このようなものになります。私は、次のコンパイラエラーで終わる
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>
}
を:
Type 'Repo' does not conform to protocol 'Initializable'. Candidate has non-matching type 'init(type: EntityType.Type)'
'EntityType拡張またはクラスのメソッドのinit()の実現を実装する必要がありますか? –
質問が更新されました。 'EntityType'は 'public init()'を持つConcreteClassです。 'Container'は実際に別のオブジェクトで初期化されます。 – Cyupa
各クラスには異なる「EntityType」シンボルがあります。 Containerでは、ConcreteClassから派生したものではなく、単なるCodableなので、init()はありません。 –