使用Swift按顺序访问Dictionary的首选键?

时间:2016-02-03 17:17:36

标签: objective-c swift dictionary nsdictionary

在Objective-C中,如果我有一个视频URL的字典,看起来有点像这样:

NSDictionary *videoURLS = @{@"High":@"http://1234", @"Lowest":@"http://5678"};

然后我可以访问首选字符串(在本例中为最高质量的视频网址),如下所示:

NSString *highestQualityUrlString = videoURLS[@"Highest"] ?: videoURLS[@"High"] ?: videoURLS [@"Medium"]?: videoURLS[@"Low"]?:videoURLS[@"Lowest"];

如何从Swift词典中访问首选字符串?

1 个答案:

答案 0 :(得分:1)

?: nil的快速等价物是空合并运算符??

let highestQualityUrlString = videoURLS["Highest"] ?? videoURLS["High"] ?? videoURLS ["Medium"] ?? videoURLS["Low"] ?? videoURLS["Lowest"]

如果您要扫描的项目列表很多,您还可以使用flatMap来简化和澄清代码:

let keys = ["Highest", "High", "Medium", "Low", "Lowest"]
let highestQualityUrlString = keys.flatMap({ videoURLS[$0] }).first

但是,这里的区别在于??是短路的,这意味着当videoURLS["High"]返回一个值时,从未调用过videoURLS [“Medium”]。 Swift 2.2将支持延迟平面地图,这意味着您可以执行以下操作并获得相同的短路行为:

let keys = ["Highest", "High", "Medium", "Low", "Lowest"]
let highestQualityUrlString = keys.lazy.flatMap({ videoURLS[$0] }).first