首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 4协议扩展-方便初始化器默认实现

Swift 4协议扩展-方便初始化器默认实现
EN

Stack Overflow用户
提问于 2017-10-06 08:30:40
回答 1查看 956关注 0票数 2

我正在试图找出如何在实现类型可以继承的协议扩展中创建默认协议初始化器实现。

看起来是这样的:

代码语言:javascript
复制
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‘不符合协议’初始化‘。候选人有非匹配类型‘init(类型: EntityType.Type)’

EN

回答 1

Stack Overflow用户

发布于 2017-10-06 08:42:42

在协议和扩展中使用不同的init。

代码语言:javascript
复制
init(type: EntityType)

必须在扩展或类中实现方法init()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46601553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档