gpt4 book ai didi

swift - 如何在快速搜索字典时使用可选链接?

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:22 24 4
gpt4 key购买 nike

我想使用 if lets 安全地搜索 swift 字典中的值,并确保它在我越来越深入字典时是类型安全的。该字典包含包含 NSArray 的字典,后者包含更多字典。

起初尝试我的代码是这样的:

  if let kkbox = ticket["KKBOX"] as? Dictionary<String, AnyObject> {
if let kkboxDlUrlDict = kkbox["kkbox_dl_url_list"] as? Dictionary<String, AnyObject> {
if let kkboxDlUrlArray = kkboxDlUrlDict["kkbox_dl_url"] as? NSArray {
for dict in kkboxDlUrlArray {
if let name = dict["name"] as? String {
if name == mediaType.rawValue {
urlStr = dict["url"] as String
}
}
}
} else { return nil }
} else { return nil }
} else { return nil }

如何将其缩短为一两行?

我意识到如果它是 2 层我可以链接它。这有效:

 if let kkboxDlUrlArray = ticket["KKBOX"]?["kkbox_dl_url_list"] as? NSArray {

}

但是任何比这更长的链都不会编译。

有没有办法多次链接字典?

谢谢

最佳答案

您可以链接,但在每一步都适当向下转换:

if let kkboxDlUrlArray = ((((ticket["KKBOX"] as? Dictionary<String, AnyObject>)?["kkbox_dl_url_list"]) as? Dictionary<String, AnyObject>)?["kkbox_dl_url"]) as? NSArray {
for dict in kkboxDlUrlArray {
println(dict)
}
}

虽然看起来不太好 - 它是一行,但不可读。

就我个人而言,在不使用任何花哨的函数式方法的情况下,我会通过一个可选绑定(bind)使链条更加明确:

let kkbox = ticket["KKBOX"] as? Dictionary<String, AnyObject>
let kkboxDlUrlDict = kkbox?["kkbox_dl_url_list"] as? Dictionary<String, AnyObject>
if let kkboxDlUrlArray = kkboxDlUrlDict?["kkbox_dl_url"] as? NSArray {
for dict in kkboxDlUrlArray {
println(dict)
}
}

在我看来更容易阅读,并且没有不必要的缩进

关于swift - 如何在快速搜索字典时使用可选链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27982159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com