Array<T> 扩展以过滤和解包选项

Array<T> extension to filter and unwrap optionals

我正在尝试筛选出可选数组并将它们解包。 所以我对 Array 结构写了以下扩展,但出现错误: 'T' is not a subtype of 'UInt8'

知道 swift 是否可行吗?

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

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

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

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

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