我从使用 [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
