在Objective-C中,如果我有一个视频URL的字典,看起来有点像这样:
NSDictionary *videoURLS = @{@"High":@"http://1234", @"Lowest":@"http://5678"};
然后我可以访问首选字符串(在本例中为最高质量的视频网址),如下所示:
NSString *highestQualityUrlString = videoURLS[@"Highest"] ?: videoURLS[@"High"] ?: videoURLS [@"Medium"]?: videoURLS[@"Low"]?:videoURLS[@"Lowest"];
如何从Swift词典中访问首选字符串?
答案 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