我有一个包含用户对象的字典,该用户对象是一个包含键“名称”的字典。 在 Swift 中,我需要访问“名称”的值。
所以我做了以下事情:
let user = question[kUserOwner] as! PFUser
let userName = user[kName] as! String
userButton.setTitle(userName, forState:UIControlState.Normal)
1) 真的没有更简单/更快捷的方法吗? 在 objective-c 中:
[_userButton setTitle:[[question objectForKey:kUserOwner] objectForKey:kName] forState:UIControlStateNormal];
我确实意识到它不是类型安全的,但我可以接受,只要我知道我在做什么。
2) 有什么办法可以避免强制转换吗?
最佳答案
当你下标时,你会得到一个可选值。并且您不能为Optional添加下标。因此,虽然您或许可以避免转换,但您无法避免展开:
let dinner = ["name":"Matt"]
let douter = ["owner":dinner]
let name = douter["owner"]!["name"]
但这之所以有效,是因为 Swift 非常清楚 douter
是什么。因此,最好分阶段进行,就像 Swift 期望的那样,例如使用一系列嵌套的 if let
绑定(bind):
let dinner : AnyObject = ["name":"Matt"] as AnyObject
let douter : AnyObject = ["owner":dinner] as AnyObject
if let owner = douter["owner"] as? [NSObject:AnyObject],
let name = dinner["name"] as? String {
// do something with name
}
关于ios - SWIFT 访问嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30676299/