可以使用Swift通用协议注入吗?

时间:2017-07-04 13:07:01

标签: swift dependency-injection swift-protocols

我正在尝试使用通用协议并注入具体实现,但我收到以下错误:Protocol 'Repo' can only be used as a generic constraint because it has Self or associated type requirements let repo: Repo

我的代码

protocol Repo{
    associatedtype T

    func doSomething() -> T

}

class MyRepo: Repo{

    func doSomething() -> String{
        return "hi"
    }
}

class SomeClass {
    let repo: Repo
    init(repo: Repo) {
        self.repo = repo
        repo.doSomething()
    }
}

class EntryPoint{
    let someClass: SomeClass
    init(){
        someClass = SomeClass(repo: MyRepo)
    }
}

首先调用入口点并设置依赖关系树。

1 个答案:

答案 0 :(得分:4)

我认为你要找的是这样的:

    protocol Repo {
      associatedtype T

      func doSomething() -> T

    }

    class MyRepo: Repo{
      func doSomething() -> String{
        return "hi"
      }
    }

    class SomeClass<A: Repo> {
      let repo: A
      init(repo: A) {
        self.repo = repo
        _ = repo.doSomething()
      }
    }

    class EntryPoint{
      let someClass: SomeClass<MyRepo>
      init(){
        someClass = SomeClass<MyRepo>(repo: MyRepo())
      }
    }
相关问题