2016-08-31 7 views
2

、私は以下のクラスを持っている:私は唯一のコンテナに、単一のクラス型を追加する場合、それは罰金コンパイルスウィフト2.2 - クラス型の可変引数パラメータで初期化子使用スウィフト2.2では

protocol Base {} 

class FirstImpl: Base {} 

class SecondImpl: Base {} 

class Container { 
    private var typeNames = Set<String>() 

    init(_ types: Base.Type...) { 
     for type in types { 
      typeNames.insert(String(type)) 
     } 
    } 
} 

let c = Container(FirstImpl) 

しかし、私はより多くのクラスタイプを追加し始めるならば、それはコンパイルされません。

let c = Container(FirstImpl, SecondImpl) 

をビルドエラーは、次のとおりです。

は「Base.Type」

が、それはスウィフトコンパイラの制限ですか、私は何か間違ったことをやっている?期待引数の型に型「(FirstImpl、SecondImpl).TYPE」の値を変換できませんか。

答えて

2

紛らわしいエラーメッセージですが、問題を解決するには、クラスのrefer to the typesを関数に渡すときに.selfを使用する必要があります。したがって、あなたは何をしたいでしょう:.selfなしでコンパイル

let c = Container(FirstImpl.self, SecondImpl.self) 

あなたの最初の例は、(スウィフト3のように解決された)実際a bugである - 詳細はthis Q&Aを参照してください。

関連する問題