}
Swift中更简便的方法
小伙伴们可能会问,为什么Swift中不需要实现这么一个API呢?其实其有更简单的实现,如下面代码所示:
复制代码extension Dictionary {
func valuesForKeys(keys: [Key]) -> [Value?] {
return keys.map { self[$0] }
}
}
上述方式实现的功能和最开始的方法实现的功能相同,虽然核心的功能是封装了map的调用,这个例子也说明了为什么Swift没有提供轻量级的API接口,因为小伙伴们简单的调用map就可以实现。
接下来,我们实验几个例子:
复制代码var dic: Dictionary = [ "1": 2, "3":3, "4":5 ]
var t = dic.valuesForKeys(["1", "4"])
//结果为:[Optional(2), Optional(5)]
var t = dict.valuesForKeys(["3", "9"])
// 结果为:[Optional(3), nil]
t = dic.valuesForKeys([])
//结果为:[]
内嵌可选类型
现在,如果我们为每一个结果调用last方法,看下结果如何?
复制代码var dic: Dictionary = [ "1": 2, "3":3, "4":5 ]
var t = dic.valuesForKeys(["1", "4"]).last //结果为:Optional(Optional(5))
// Optional(Optional("Ching"))
var t = dict.valuesForKeys(["3", "9"]).last
// 结果为:Optional(nil)
var t = dict.valuesForKeys([]).last
// 结果为:nil
小伙伴们立马迷糊了,为什么会出现两层包含的可选类型呢?,特别对第二种情况的Optional(nil),这是什么节奏?
我们回过头看看last属性的定义:
复制代码var last:T? { get }
很明显last属性的类型是数组元素类型的可选类型,这种情况下,因为元素类型是(String?),那么再结合返回的类型,于是其结果就是String??了,这就是所谓的嵌套可选类型。但嵌套可选类型本质是什么意思呢?








