var num1: Int? = 10
//三目运算处理
var num2 = (num1 != null) ? (num1! + 10) : nil
//map
var num3 = num1.map{ $0 + 10 }
print(num3)//Optional(20) 如果num1 = nil,结果就会是nil
总结:map能够安全的处理可选类型,无需解包拿到确切的值,可在需要的时候再去处理得到的可选结果值,flatMap 也可以
那么map 和flatMap 的区别呢?
网上的答案是当我们的闭包参数有可能返回 nil 的时候,用flatMap
func mapAndFlatmap() {
let arr = [0,nil,1,nil,2]
let map_arr = arr.map { $0 }
print(map_arr)//[Optional(0), nil, Optional(1), nil, Optional(2)]
let flatmap_arr = arr.compactMap { $0 }
print(flatmap_arr)//[0, 1, 2]
}
参考:
1.Swift --- Optional的map和flatMap
2.Swift 烧脑体操(四) - map 和 flatMap
网友评论