【发布时间】:2015-07-04 09:47:49
【问题描述】:
我对 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 类型。
是否有替代方法可以根据上下文确定类型,但没有强制展开?
【问题讨论】:
-
您的意思可能是 Swift 1.2 与 1.1,目前还没有 Swift 1.3(或者我错过了什么?)
-
Opps,是的,我想我有 Xcode 6.3...更新的问题 - 谢谢!
-
虽然你可以使用
flatMap { $0 }来删除nils,但真正的问题是应该你。如果你不小心,flatMap可能会导致错误,所以我建议改用removeNils。
标签: swift functional-programming optional higher-order-functions flatmap