不可能限制为通用结构或类定义的类型-数组旨在与任何类型一起使用,因此您不能添加适用于类型子集的方法。类型约束只能在声明泛型时指定
实现所需功能的唯一方法是创建全局函数或静态方法-在后一种情况下:
extension Array {
static func filterNils(array: [T?]) -> [T] {
return array.filter { $0 != nil }.map { $0! }
}
}
var array:[Int?] = [1, nil, 2, 3, nil]
Array.filterNils(array)
或简单地使用compactMap
(以前为flatMap
),该方法可用于删除所有nil值:
[1, 2, nil, 4].compactMap { $0 } // Returns [1, 2, 4]