数组 – 创建一个扩展以从Swift中的数组中过滤nils
发布时间:2020-12-14 05:59:16 所属栏目:百科 来源:网络整理
导读:我试图写一个扩展Array,它将允许一个可选的T的数组被转换成非可选T的数组。 例如这可以写成一个免费的函数,像这样: func removeAllNils(array: [T?]) - [T] { return array .filter({ $0 != nil }) // remove nils,still a [T?] .map({ $0! }) // convert
我试图写一个扩展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! }) } } (它不编译!)
不能限制为通用结构或类定义的类型 – 数组被设计为与任何类型一起使用,因此您不能添加一个适用于类型子集的方法。类型约束只能在声明通用类型时指定
实现你所需要的唯一方法是创建一个全局函数或一个静态方法 – 在后一种情况下: 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |