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
必须是字符串。