【发布时间】:2015-03-14 22:50:19
【问题描述】:
我想使用 if let 安全地搜索 swift Dictionary 中的值,并确保它是类型安全的,因为我对字典越来越深入。该字典包含包含 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 {
}
但是任何比这更长的链都不会编译。
有没有办法多次链接字典?
谢谢
【问题讨论】:
-
SwiftyJSON 可能有助于简化一些。见github.com/SwiftyJSON/SwiftyJSON。
-
您的
else子句返回nil,但您的主子句分配给urlStr?那不会编译。换句话说,如果我们知道预期回报,我们也许可以利用map()和相关函数。 -
@MaxMacLeod SwiftJSON 很漂亮!这正是我一直在寻找的。非常感谢先生。
标签: swift dictionary optional-chaining