当前位置 : 主页 > 手机开发 > 其它 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-12
假设您有一个json someText字符串,并且您想将其解析为字典.以前我做过这个…… let jsonResult: NSDictionary = try JSONSerialization.jsonObject( with: someText.data(using: .utf8)!, options: JSONSerialization.ReadingOp
假设您有一个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,将其强制转换为期望的类型.

网友评论