Objective c 使用Swift按顺序访问字典的首选键?

Objective c 使用Swift按顺序访问字典的首选键?,objective-c,swift,dictionary,nsdictionary,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"]?:video

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

NSDictionary *videoURLS = @{@"High":@"http://1234", @"Lowest":@"http://5678"};
NSString *highestQualityUrlString = videoURLS[@"Highest"] ?: videoURLS[@"High"] ?: videoURLS [@"Medium"]?: videoURLS[@"Low"]?:videoURLS[@"Lowest"];
然后我可以访问首选字符串(在本例中为最高质量的视频URL),如下所示:

NSDictionary *videoURLS = @{@"High":@"http://1234", @"Lowest":@"http://5678"};
NSString *highestQualityUrlString = videoURLS[@"Highest"] ?: videoURLS[@"High"] ?: videoURLS [@"Medium"]?: videoURLS[@"Low"]?:videoURLS[@"Lowest"];

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

?:
对应的
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
不过,这里的区别在于
是短路,这意味着当
VideoURL[“高”]
返回一个值时,VideoURL[“中”]从未被调用。Swift 2.2将支持惰性平面贴图,这意味着您可以执行以下操作并获得相同的短路行为:

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