我正在尝试编写一个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
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法将其作为扩展工作.我试图告诉编译器扩展只适用于可选值的数组.这是我到目前为止:
extension Array {
func filterNils<U, T: Optional<U>>() -> [U] {
return filter({ $0 != nil }).map({ $0! })
}
}
Run Code Online (Sandbox Code Playgroud)
(它不编译!)