假设我有一个名为的Swift对象Animal。我有一系列Animal对象,其中一些可能是nil。
目前,我正在这样做:
arrayOfAnimal.filter({$0 != nil}) as! [Animal]
由于力量解开,这感觉很hacky。想知道是否有更好的方法可以滤除nil。
Mar*_*n R 14
flatMap() 做这项工作:
let filtered = arrayOfAnimal.flatMap { $0 }
Run Code Online (Sandbox Code Playgroud)
将闭包(此处是标识)应用于所有元素,并返回具有非nil结果的数组。返回类型为[Animal],不需要强制强制转换。
简单的例子:
let array: [Int?] = [1, nil, 2, nil, 3]
let filtered = array.flatMap { $0 }
print(filtered) // [1, 2, 3]
print(type(of: filtered)) // Array<Int>
Run Code Online (Sandbox Code Playgroud)
对于Swift 4.1及更高版本,请替换flatMap为compactMap。
pic*_*ano 10
您的代码有效,但有更好的方法。使用该compactMap功能。
struct Animal {}
let arrayOfAnimal: [Animal?] = [nil, Animal(), Animal(), nil]
let newArray: [Animal] = arrayOfAnimal.compactMap { $0 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |