2017-12-15 2 views
1

私はAnimalと呼ばれるスウィフトオブジェクトを持っているとしましょう。私はAnimalオブジェクトの配列を持っていますが、そのうちのいくつかはnilです。スウィフトアレイでゼロをフィルタリングするクリーナーの方法

は現在、私はこれをやっている:

arrayOfAnimal.filter({$0 != nil}) as! [Animal]

これが原因で力アンラップのではなくハック感じています。 nilsを除外するためのより良い方法があるかどうかわかります。

+0

あなたの目的は、すべてのnil値を除外することです。 –

答えて

3

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> 
1

あなたのコードは動作しますが、より良い方法があります。 flatMap機能を使用してください。

struct Animal {} 

let arrayOfAnimal: [Animal?] = [nil, Animal(), Animal(), nil] 
let newArray: [Animal] = arrayOfAnimal.flatMap { $0 } 
関連する問題