Objective c 使用Swift按顺序访问字典的首选键?
在Objective-C中,如果我有一个视频URL字典,它看起来有点像这样: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
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