2017-01-17 12 views
5

o jenerik türüne kısıtlı bir jenerik sekans uzantısı içinde bir jenerik ürünün T kısıtlayın Eklenti sadece (bu durumda) RxSwift gözlenebilir dizileri için geçerlidir.İçiçe Jenerik Sınırlamalar:</p> <pre><code>extension Sequence where Iterator.Element : ObservableType { } </code></pre> <p>Bu güvence altına alacak: biz böyle dizi olarak jenerik öğeler üzerinde uzantıları yazabilirsiniz Swift ise

Bununla birlikte, öğe kısıtlaması başka bir genel ise, o zaman bu jeneriği kısıtlayabilir misiniz? ör .: Yukarıdaki sahte kodda

extension Sequence where Iterator.Element : ObservableType where E : MyType { 

} 

(bu çalışmıyor) niyet ki: gözlemlenebilir MyType örneğin tipte bir gözlemlenebilir olduğu Bu uzantı gözlemlenebilir dizileri için de geçerli olmalıdır

[Gözlemlenebilir]

cevap

2

Sen ObservableType uyan türlerine Iterator.Element kısıtlamak ve sonra ilişkili tip Iterator.Element ait E başka kısıtlamayı ekleyebilirsiniz:

protocol ObservableType { 
    associatedtype E 
    // ... 
} 

class MyType { } 

extension Sequence where Iterator.Element: ObservableType, Iterator.Element.E: MyType { 

} 
+1

olsa aynı değil değil mi? Bu, sıra elemanındaki iki kısıtlama mı? Bu jenerik, bu jenerik içinde ne olması gerektiği konusunda bir kısıtlama ile jenerik olmalıdır tek kısıtlama yerine? Yoksa ikinci parça ObservableType.Element.E? (denemeye) – Cargowire

+0

@Cargowire: Yukarıdaki kod, uzantıyı, Sınıfım'dan miras alınan ilişkili bir türe sahip olan gözlenebilirlerin dizilerine sınırlar. Belki de bir şeye bakıyorum ya da yanlış anlaşılıyor - ihtiyacın olandan farklı mı? Bu durumda amaçlanan şekilde işe yaramaz mı? –

+1

gah haklıyım İkinci kısıtlamayı 'Iterator.Element' yerine 'Iterator.Element' olarak yanlış okudum! – Cargowire