flatMap について少し混乱しています (Swift 1.2 に追加)
オプションのタイプの配列があるとします。
let possibles:[Int?] = [nil, 1, 2, 3, nil, nil, 4, 5]
Swift 1.1 では、次のようなマップに続いてフィルターを実行します。
let filtermap = possibles.filter({ return $0 != nil }).map({ return $0! })
// filtermap = [1, 2, 3, 4, 5]
私はいくつかの方法で flatMap を使用してこれを実行しようとしました:
var flatmap1 = possibles.flatMap({
return $0 == nil ? [] : [$0!]
})
と
var flatmap2:[Int] = possibles.flatMap({
if let exercise = $0 { return [exercise] }
return []
})
配列型を指定する必要があることを除いて、私は最後のアプローチを好みます (強制的なアンラップを行う必要がないため$0!
... 私はこれらを恐れており、何としても避けています)。
コンテキストによってタイプを把握する代替手段はありますが、強制的なアンラップはありませんか?