Swift通用协议注入是否可行?

Swift通用协议注入是否可行?,swift,dependency-injection,swift-protocols,Swift,Dependency Injection,Swift Protocols,我试图使用泛型协议并注入一个具体的实现,但我得到了以下错误:协议“Repo”只能用作泛型约束,因为它在让Repo:Repo 我的代码 protocol Repo{ associatedtype T func doSomething() -> T } class MyRepo: Repo{ func doSomething() -> String{ return "hi" } } class SomeClass { le

我试图使用泛型协议并注入一个具体的实现,但我得到了以下错误:
协议“Repo”只能用作泛型约束,因为它在
让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)
    }
}

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

我认为您要查找的内容如下:

    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())
      }
    }
协议回购{ 关联T型 func doSomething()->T } 类别MyRepo:Repo{ func doSomething()->字符串{ 返回“嗨” } } 上课{ 让回购:A 初始(回购:A){ self.repo=repo _=repo.doSomething() } } 类入口点{ 让我们来上课 init(){ someClass=someClass(repo:MyRepo()) } }
请记住,
其中A.T==String
不是必需的,如果
MyRepo
中的
doSomething
返回任何数据类型,但不返回字符串,则它将不起作用。这会导致确保
T
必须是字符串。