我想知道如何在实现类型可以继承的协议扩展中创建默认协议初始值设定项实现。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'有'的init()'? –
更新了问题。 'EntityType'是具有'public init()'的ConcreteClass。 Container实际上是用另一个对象初始化的。 – Cyupa
每个类中都有不同的'EntityType'符号。在Container中它没有init(),因为它只是Codable,而不是从ConcreteClass派生。 –