2017-01-17 4 views
5

そのジェネリック型に制約されている一般的なシーケンス拡張内の一般的なアイテムのTを拘束し拡張子は(この場合は)RxSwiftオブザーバブルのシーケンスにのみ適用されます。ネストされた一般的な制約:</p> <pre><code>extension Sequence where Iterator.Element : ObservableType { } </code></pre> <p>これは保証する:私たちは、このようなシーケンスなどの一般的な項目の拡張を書くことができスウィフトで

しかし、要素の制約が別の一般的なものであれば、その一般的な制約はできますか?例えば:上記の擬似コード(それが機能しない)意図は言うことであるにおいて

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

} 

この拡張は、観測ががMyType例えば型の観察可能な観測の配列に適用されるべきですあなたが ObservableTypeに準拠したタイプにIterator.Elementを制限して、関連するタイプIterator.ElementEのための別の制約を追加することができます

答えて

2

[観測]:

protocol ObservableType { 
    associatedtype E 
    // ... 
} 

class MyType { } 

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

} 
+1

全く同じではないのですけれども、それは何ですか?これはシーケンス要素の2つの制約ですか?そのジェネリックがその中にあるべきものに関する制約を持つ要素がジェネリックであるべきであるという1つの制約よりもむしろ? 2番目の作品はObservableType.Element.Eですか? – Cargowire

+0

@Cargowire:上記のコードは、MyClassを継承する関連する型を持つobservablesのシーケンスに拡張を制限します。おそらく、私は何かを見落としたり誤解したりしています。これはあなたが必要とするものとは違うのでしょうか?どのような場合は意図したとおりに動作しませんか? –

+1

あなたは正しいです私は 'Iterator.Element.E'の代わりに 'Iterator.Element'として2番目の制約を誤読していました! – Cargowire

関連する問題