2016-07-23 15 views
1

Ich habe einen Typ, den ich versuche zu erweitern: AnyObserver<[MyModel]>. Es wäre leicht, zu verlängern, wenn ich nicht in einem Array als Element vorbei, die ich so etwas tun kann:Wie Typ zu erweitern, der generische Elemente von Array akzeptiert?

extension AnyObserver where Element: MyModel {...} 

jedoch tatsächlich Element ein Array ist, so habe ich versucht, so etwas wie zu tun entweder von der unten:

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

diese resultieren in der Kompilierung Fehler wie:

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

Was ist der richtige Weg für diese ca schaffen eine Erweiterung se?

Antwort

3

Im Allgemeinen können Sie einen generischen Typ basierend auf einem bestimmten Typparameter nicht erweitern. Sie können nur basierend auf einem Protokoll erweitern. Aber in Ihrem speziellen Fall gibt uns das einen Ausweg. Benötigen Sie einfach kein Array. Erfordern einen CollectionType.

extension AnyObserver 
    where Element: CollectionType, Element.Generator.Element == MyModel { 
}