2016-07-23 11 views
1

私は具体的に拡張しようとしているタイプがあります:AnyObserver<[MyModel]>です。配列の汎用要素を受け入れる型を拡張する方法は?

extension AnyObserver where Element: MyModel {...} 

しかし、実際にElementが配列であるので、私のような何かをしようとした:私がこのような何かを行うことができますElementとして配列で渡していなかった場合は拡張することは簡単だろう以下のいずれか:

extension AnyObserver where Element: Array<MyModel> {...} 
extension AnyObserver where Element: Array<T: MyModel> {...} 
extension AnyObserver where Element == Array<MyModel> {...} 
extension AnyObserver where Element == [MyModel] {...} 

これらの結果のようなコンパイルエラーに:

Same-type requirement makes generic parameter non-generic 
Type 'Element' constrained to non-protocol type 

正しい方法は、このCAの拡張子をどのように作成されますセ?

答えて

3

通常、特定の型パラメータに基づいてジェネリック型を拡張することはできません。プロトコルに基づいてのみ拡張できます。しかし、あなたの特別なケースでは、それは私たちにアウトを与える。ただ配列を必要としません。 CollectionTypeが必要です。

extension AnyObserver 
    where Element: CollectionType, Element.Generator.Element == MyModel { 
} 
関連する問題