【问题标题】:'(String, AnyObject)' is not convertible to '[String : AnyObject]''(String, AnyObject)' 不能转换为 '[String : AnyObject]'
【发布时间】:2014-07-27 15:33:53
【问题描述】:
// response is of type AnyObject!
let responseDic = response as [String : AnyObject]
let userDic = responseDic["user"] as [String : AnyObject]

但是,在最后一行,我得到了错误:

'(String, AnyObject)' is not convertible to '[String : AnyObject]'

所以我猜测在字典中查找一个键会返回一个可选值,所以我尝试了:

let userDic = responseDic["user"]? as [String : AnyObject]

但我明白了:

'String' is not convertible to 'DictionaryIndex<String, AnyObject>'

什么是让它工作的正确方法?

【问题讨论】:

    标签: swift


    【解决方案1】:

    使用感叹号代替可选项:

    var response: AnyObject! = ["user" : [String : AnyObject]()]
    let responseDic = response as [String : AnyObject]
    let userDic: [String : AnyObject] = responseDic["user"]! as [String : AnyObject]
    

    如果你想确保键 'user' 有一个非 nil 值并且它是一个 [String : AnyObject] 你可以使用 if let:

    if let user: AnyObject = responseDic["user"] {
        if let userDic = user as? [String : AnyObject]{
            //do stuff with userDic
        }
    }
    

    【讨论】:

    • 这会导致异常是responseDic["user"]是nil吗?什么是安全的方法?
    • 会的。我添加了另一个 sn-p
    • 您添加的第二种方式有更短的方法吗?
    • 您可以将它们组合成一行,尽管我认为我做不到。不过我现在无法测试
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 2015-11-04
    • 2014-10-10
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多