gpt4 book ai didi

arrays - 创建一个扩展以在 Swift 中从数组中过滤 nils

转载 作者:IT王子 更新时间:2023-10-29 05:00:01 25 4
gpt4 key购买 nike

我正在尝试编写 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! })
}
}

(它不编译!)

最佳答案

从 Swift 2.0 开始,您无需编写自己的扩展来从数组中过滤 nil 值,您可以使用 flatMap,它会展平数组并过滤 nils:

let optionals : [String?] = ["a", "b", nil, "d"]
let nonOptionals = optionals.flatMap{$0}
print(nonOptionals)

打印:

[a, b, d]

注意事项:

有 2 个 flatMap 函数:

关于arrays - 创建一个扩展以在 Swift 中从数组中过滤 nils,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28190631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com