私はAnimal
と呼ばれるスウィフトオブジェクトを持っているとしましょう。私はAnimal
オブジェクトの配列を持っていますが、そのうちのいくつかはnil
です。スウィフトアレイでゼロをフィルタリングするクリーナーの方法
は現在、私はこれをやっている:
arrayOfAnimal.filter({$0 != nil}) as! [Animal]
これが原因で力アンラップのではなくハック感じています。 nilsを除外するためのより良い方法があるかどうかわかります。
私はAnimal
と呼ばれるスウィフトオブジェクトを持っているとしましょう。私はAnimal
オブジェクトの配列を持っていますが、そのうちのいくつかはnil
です。スウィフトアレイでゼロをフィルタリングするクリーナーの方法
は現在、私はこれをやっている:
arrayOfAnimal.filter({$0 != nil}) as! [Animal]
これが原因で力アンラップのではなくハック感じています。 nilsを除外するためのより良い方法があるかどうかわかります。
flatMap()
は、仕事をして:(ここで同一である)
let filtered = arrayOfAnimal.flatMap { $0 }
閉鎖は全て 要素に適用され、非ゼロの結果と配列が返されます。 戻り値の型は[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>
あなたのコードは動作しますが、より良い方法があります。 flatMap
機能を使用してください。
struct Animal {}
let arrayOfAnimal: [Animal?] = [nil, Animal(), Animal(), nil]
let newArray: [Animal] = arrayOfAnimal.flatMap { $0 }
あなたの目的は、すべてのnil値を除外することです。 –