我对 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!
......我对这些感到害怕并不惜一切代价避免它们)除了我需要指定 Array 类型。
是否有另一种方法可以根据上下文确定类型,但没有强制展开?