我试图写一个扩展Array,它将允许一个可选的T的数组被转换成非可选T的数组。
例如这可以写成一个免费的函数,像这样:
func removeAllNils(array: [T?]) -> [T] { return array .filter({ $0 != nil }) // remove nils,still a [T?] .map({ $0! }) // convert each element from a T? to a T }
但是,我不能让这个工作作为一个扩展。我试图告诉编译器扩展只适用于可选值数组。这是我到目前为止:
extension Array { func filterNils<U,T: Optional<U>>() -> [U] { return filter({ $0 != nil }).map({ $0! }) } }
(它不编译!)