2017-07-04 6 views
1

私は具体的な実装を汎用的なプロトコルを使用して注入しようとしていますが、私は次のエラーを取得する:Protocol 'Repo' can only be used as a generic constraint because it has Self or associated type requirementslet repo: RepoはSwift汎用プロトコルの注入が可能ですか?

私のコード

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) 
    } 
} 

エントリポイントでは、最初に呼び出されると、依存関係ツリーを設定しています。

答えて

2

私はあなたが探しているものだと思うが、このようなものである:任意のデータ型を返すMyRepo` `でdoSomething``場合

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()) 
     } 
    } 
+0

、どこAT STRING'が必要とされていない== 'ことに注意してくださいが、 Stringではなく動作しません。 'T'は文字列でなければなりません。 –

+0

ありがとう@AhmadF、更新しました。 – jwswart

関連する問題