2017-11-29 3 views
0

私は型がContainer<T>です。私は拡張を追加したいと思います。Tが配列の場合、配列の各要素に関数を適用できます。Swift:関連付けられた型の汎用型を拡張します。

のような何か:

class Container<T> { 

    var item: T 

    init(item: T) { 
     self.item = item 
    } 
} 

extension Container where T: Array<Element> { 

    func mapElements<U>(transform: (Element) -> U) -> Container<[U]> { 
     return Container(item.map(transform)) 
    } 
} 

上記のコードはもちろん、コンパイルされません。これが達成されるかもしれない方法/場合に! Use of undeclared type Element

任意のアイデア?

答えて

0

アハはそれを理解しました。

Arrayから継承する代わりに、TSequenceから継承するように制約します。次に、以下を書くことができます:

extension Container where T: Sequence { 

    func mapElements<U>(transform: (T.Element) -> U) -> Container<[U]> { 
     return Container(item.map(transform)) 
    } 
} 
関連する問題