在Swift中将AnyObject转换为字典

51

我正在使用AFNetworking从iTunes API获取数据,我想用响应创建一个字典,但我无法做到。

错误:无法将表达式的类型“Dictionary”转换为类型“Hashable”

这是我的代码:

func getItunesStore() {

        self.manager.GET( "https://itunes.apple.com/es/rss/topfreeapplications/limit=10/json",
            parameters: nil,
            success: { (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
                var jsonResult: Dictionary = responseObject as Dictionary

            },
            failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
                println("Error:" + error.localizedDescription)
            })

    }
1个回答

128

在 Swift 中定义 Dictionary 时,您需要同时指定键和值的类型。示例如下:

var jsonResult = responseObject as Dictionary<String, AnyObject>

然而,如果强制类型转换失败,您将会收到一个运行时错误——最好使用类似以下方式进行处理:

If the cast fails, however, you'll get a runtime error -- you're better off with something like:

if let jsonResult = responseObject as? Dictionary<String, AnyObject> {
    // do whatever with jsonResult
}

2
由于“let”关键字将其标记为不可变,因此您无法为jsonResult分配任何值。 您将需要使用一个新的复制对象。 - lomokat
1
@Kat 在我的示例中,let 是声明的一部分,所以没有问题。你说得对,不能随后给它赋任何值,但似乎这并不是必要的,因为你正在尝试解析 JSON。 - Nate Cook
我并不是想暗示你的解决方案是错误的,我只是试图向@Sean解释为什么他们不能在if let块内分配任何东西到jsonResult。 - lomokat
@kat 我的意思不是将 jsonResult 分配给其他东西,而是将一个新的字符串变量分配给 jsonResult 的内容。我该怎么做? - Sean
1
@Sean 从JSON中解析出你想要的特定数据并不总是容易的 - 阅读这里关于此的不同问题,并在仍然有困难时提出新问题。 - Nate Cook
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接