详解Swift model 解析的两种方法

所属分类: 软件编程 / IOS 阅读数: 1937
收藏 0 赞 0 分享

详解Swift model 解析的两种方法

1. 常规解析方法

  //懒加载声明一个LJNewsModel为数据的数组

  lazy var ljArray : [LJNewsModel] = [LJNewsModel]()

//MARK:-- 数据获取和解析 
extension NewsViewController{ 
  func requestNetData(){ 
    /* 
     打印json数据 
     */ 
    LJDownLoadNetImage.request("GET", url: "http://c.m.163.com/nc/article/list/T1348647909107/0-20.html") { (data, respond, error) in 
       方法一:解析数据 
        
       let str = String(data:data!, encoding: String.Encoding.utf8)! 
       print(str) 
        
       let ljTempArray : NSArray = self.getDictionaryFromJSONString(jsonString: str).object(forKey: "T1348647909107") as! NSArray 
        
       for m in 0 ..< ljTempArray.count 
       { 
       let dict:NSDictionary = ljTempArray[m] as! NSDictionary 
       let model = LJNewsModel() 
       model.imageUrl = dict.object(forKey: "imgsrc") as! String 
       model.contentStr = dict.object(forKey: "title") as! String 
       let count :Int = (dict.object(forKey: "replyCount") != nil) ? dict.object(forKey: "replyCount") as! Int : 0 
       model.replyCount = "\(count)" 
       self.ljArray.add(model) 
       } 
       
      self.ljTablewView.reloadData() 
    } 
  } 
   
  func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ 
     
    let jsonData:Data = jsonString.data(using: .utf8)! 
     
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) 
    if dict != nil { 
      return dict as! NSDictionary 
    } 
    return NSDictionary() 
  } 
} 

model

import Foundation 
 
class LJNewsModel: NSObject { 
   
  //MARK:- 定义属性 
  var imgsrc: String = ""  ///< store user's name, optional 
  var title: String = ""   ///< store user's telephone number 
  var replyCount: Int = 0 
   
  //方法二的model 
  override init() { 
    super.init() 
  } 
   
  func setModel(_ imageUrl: String ,_ contentStr: String, _ replyCount:Int) { 
    self.imageUrl = imageUrl 
    self.contentStr = contentStr 
    self.replyCount = replyCount 
  } 
} 

2. 利用swift自有的函数进行解析-------推荐

//MARK:-- 数据获取和解析 
extension NewsViewController{ 
  func requestNetData(){ 
    /* 
     打印json数据 
     */ 
    LJDownLoadNetImage.request("GET", url: "http://c.m.163.com/nc/article/list/T1348647909107/0-20.html") { (data, respond, error) in 
       
      //as? [[String :Any]] 转化为以字典为元素的数组 
      //as? [String :Any]  转化为字典 
      //1.方法一:解析数据 -- 推荐 
      let str = String(data:data!, encoding: String.Encoding.utf8)! 
      guard let allResulrDict = self.getDictionaryFromJSONString(jsonString:str) as? [String : Any] else {return} 
      guard let dataArray = allResulrDict["T1348647909107"] as? [[String :Any]] else {return} 
      //print(dataArray) 
       
      for dict in dataArray{ 
        self.ljArray.append(LJNewsModel(dict)) 
      } 
      self.ljTablewView.reloadData() 
    } 
  } 
   
  func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ 
     
    let jsonData:Data = jsonString.data(using: .utf8)! 
     
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) 
    if dict != nil { 
      return dict as! NSDictionary 
    } 
    return NSDictionary() 
  } 
} 
import Foundation 
 
class LJNewsModel: NSObject { 
   
  //MARK:- 定义属性 
  var imgsrc: String = ""  ///< store user's name, optional 
  var title: String = ""   ///< store user's telephone number 
  var replyCount: Int = 0 
   
   //方法一的model 
  //MARK:- 自定义构造函数 
  init(_ dict : [String: Any]){ 
    super.init() 
    setValuesForKeys(dict) 
  } 
 
  override func setValue(_ value: Any?, forUndefinedKey key: String) { 
  } 
} 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

iOS 仿百度外卖-首页重力感应的实例

这篇文章主要介绍了iOS 仿百度外卖-首页重力感应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

iOS实现时间显示几分钟前,几小时前以及刚刚的方法示例

这篇文章主要介绍了如何利用iOS实现时间显示是在几小时前,几分钟前以及刚刚的格式,类似大家在qq空间和朋友圈微博看到的效果,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
收藏 0 赞 0 分享

iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑

本文主要给大家介绍ios中从手机相册中读取条形码和二维码的问题及解决办法,需要的朋友参考下
收藏 0 赞 0 分享

IOS Cache设计详细介绍及简单示例

这篇文章主要介绍了IOS Cache设计详细介绍及简单示例的相关资料,Cache的目的是为了追求更高的速度体验,Cache的源头是两种数据读取方式在成本和性能上的差异,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS本地动态生成验证码的方法

这篇文章主要介绍了iOS本地动态生成验证码的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS绘制3D饼图的实现方法

饼图常用于统计学模块。常见的一般为2D饼图,这篇文章主要介绍了iOS绘制3D饼图的实现方法,3D饼图更加立体,用户的好感度也比较高,下面需要的朋友可以参考借鉴,一起来看看吧。
收藏 0 赞 0 分享

谈谈iOS开发之JSON格式数据的生成与解析

JSON格式取代了xml给网络传输带来了很大的便利,本篇文章主要介绍了iOS开发:对象直接转化成JSON详解,具有一定的参考价值,有兴趣的可以了解一下。
收藏 0 赞 0 分享

IOS 身份证校验详细介绍及示例代码

这篇文章主要介绍了IOS 身份证校验详细介绍及示例代码的相关资料,这里对身份校验比较详细,附有简单实例,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView

这篇文章主要介绍了IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS 仿支付宝支付屏幕亮度变化机制

这篇文章主要介绍了IOS 仿支付宝支付屏幕亮度变化机制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多