作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何在实现类型可以继承的协议(protocol)扩展中创建默认协议(protocol)初始化器实现。
看起来像这样:
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)'
最佳答案
您在协议(protocol)和扩展中使用了不同的 init。
init(type: EntityType)
您必须在扩展或类中实现方法 init()
关于Swift 4 协议(protocol)扩展 - 便利初始化器默认实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601553/
我的图书馆的几个部分都带有“便利”功能。例如,容器类可能具有解析字符串信息的功能。这些功能不一定一直都需要(或想要),因此我想将它们放在单独的文件中,以便可以根据用户的需要将它们包括或省略。 应该如何
我已经尝试在 Stack Overflow 和其他网站上搜索使用 Sets 与 Lists 的优缺点和便利,但我真的找不到明确的答案何时使用这个或那个。 从 Hibernate 的文档中,他们声明非重
我是一名优秀的程序员,十分优秀!