Swift:扩展关联类型为Array的泛型类型

时间:2017-11-29 20:19:36

标签: arrays swift generics

我有Container<T>类型。我想添加一个扩展,如果T是一个数组,函数可以应用于数组的每个元素。

类似的东西:

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))
    }
}

上面的代码当然没有编译:{{1​​}}

关于是否/如何实现这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

啊,阿哈想出来了。

不是从Array继承,而是将T限制为从Sequence继承。然后可以写下面的内容:

extension Container where T: Sequence {

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