AnyObject(来自JSONObjectWithData)不能转换为[String:Any]

时间:2014-08-17 13:43:08

标签: json dictionary swift

我从使用[String:AnyObject]字典转向使用[String:Any],希望能够利用字典值中的原生Swift值类型(例如String)而不是旧的基础值(例如NSString)。这似乎几乎无处不在,但是我想要实现的是这一行代码:

let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)

在Swift中,这将返回一个AnyObject!,当我使用println在控制台中显示它时,它看起来与预期完全一样,并且调试区域中的长签名表明NSDictionary是它的基础,但是当我尝试强制转换时如果在上面一行的末尾有as [String : Any],我会收到以下错误:

AnyObject is not convertible to [String : Any]

为什么会发生这种情况,如何解决这个问题,请记住我确实想在这里使用[String:Any],并且看不出任何不可能的好理由,这是一个很好的解决方案。

1 个答案:

答案 0 :(得分:3)

在Playground中试验了一下后,下面的代码似乎有效。请注意,Any不起作用,而AnyObject似乎按预期工作。

let jsonString = "{\"name\":\"John\", \"age\":23}"
let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
let json = NSJSONSerialization.JSONObjectWithData(jsonData, 
   options: NSJSONReadingOptions.MutableContainers, error: nil) as [String:AnyObject]
// ["name": "John", "age": __NSCFNumber]
let name = json["name"] as AnyObject! as String  // "John"
let age  = json["age"]  as AnyObject! as Int     // 23