微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用[String:Any]而不是NSDictionary的Swift3 JSONSerialization

假设您有一个json someText字符串,并且您想将其解析为字典.以前我做过这个……

let jsonResult: NSDictionary =
   try JSONSerialization.jsonObject(
      with: someText.data(using: .utf8)!,options: JSONSerialization.ReadingOptions.mutableContainers)
         as! NSDictionary

但那只是一个糟糕的NSDictionary.

看来你确实可以这样做……

let jsonResult: [String:Any] =
   try JSONSerialization.jsonObject(
      with: someText.data(using: .utf8)!,options: JSONSerialization.ReadingOptions.mutableContainers)
         as! [String:Any]

所以这是一个真正的Swift词典.

这有用吗?是否存在严重的效率差异,或者其他问题?

对我来说很困惑

open class func jsonObject(with data: Data,options opt: JSONSerialization.ReadingOptions = []) throws -> Any

无论如何,电话只会返回Any.所以当你把它投射到[String:Any]或者NSDictionary时,过程是什么,最好的是什么?

解决方法

Are there drastic efficiency differences

是的,有.

NSDictionary完全缺乏类型信息,本机Swift集合类型更有效,强烈推荐.你可以使用var免费获得可变性.无论如何,mutableContainers在Swift中都是无用的.

jsonObject(数据返回Any,因为返回类型可以是Dictionary,Array甚至是String / Number,最小公分母是Any,将其强制转换为期望的类型.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐