Skip to main content
 首页 » 操作系统

json之AnyObject(来自 JSONObjectWithData)不可转换为 [String : Any]

2024年01月01日45JustinYoung

我从使用 [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 不能转换为 [String : Any]

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

请您参考如下方法:

在 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