用于过滤和展开选项</t>的Array <t>扩展名

时间:2015-02-09 22:20:01

标签: arrays swift generics dictionary filter

我正在尝试过滤掉一系列可选项并打开它们。 所以我写了以下扩展到Array结构但是我收到错误:'T'不是'UInt8'的子类型

任何想法是否可以使用swift?

extension Array {
    func filterOptionals() -> [T] {
        return filter({$0 != nil }).map({$0!})
    }
}

2 个答案:

答案 0 :(得分:0)

数组可以包含任何类型的元素,不一定是'Optional<T>'。目前不可能,也可能永远不会编写泛型类型的专用扩展。我们必须使用全局函数:

func filterOptionals<T>(array: [T?]) -> [T] {
    return array.filter {$0 != nil } .map {$0!}
}

答案 1 :(得分:0)

是的,有可能。方法如下:

extension Array {
    func catOptionals<A>() -> [A] where Element == A? {
        return self.flatMap{ $0 }
    }
}