详解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) { 
  } 
} 

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

详解Swift model 解析的两种方法的更多相关文章

  1. Swift 进阶 —— map 和 flatMap的使用

    这篇文章主要介绍了Swift map和flatMap的相关资料,帮助大家更好的理解和使用Swift,感兴趣的朋友可以了解下

  2. CakePHP框架Model函数定义方法示例

    这篇文章主要介绍了CakePHP框架Model函数定义方法,结合具体查询函数示例分析了CakePHP框架Model函数的定义方法,需要的朋友可以参考下

  3. laravel model模型处理之修改查询或修改字段时的类型格式案例

    今天小编就为大家分享一篇laravel model模型处理之修改查询或修改字段时的类型格式案例,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧

  4. Swift和Objective-C 混编注意事项

    这篇文章主要介绍了Swift和Objective-C 混编注意事项的相关资料,需要的朋友可以参考下

  5. TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】

    这篇文章主要介绍了TP5框架model常见操作,结合实例形式总结分析了thinkPHP5框架增删改查、聚合、获取器、修改器、时间戳、软删除等常见操作技巧,需要的朋友可以参考下

  6. Swift 2.1 为 UIView 添加点击事件和点击效果

    本文主要介绍 Swift UIView,这里给大家提供代码示例作为参考为UIView 添加点击事件和点击效果,希望能帮助IOS开发的同学

  7. iOS swift 总结NavigationController出现问题及解决方法

    这篇文章主要介绍了iOS swift 总结NavigationController出现问题及解决方法的相关资料,需要的朋友可以参考下

  8. iOS中关于Swift UICollectionView横向分页的问题

    这篇文章通过图文并茂的形式给大家介绍UICollectionView横向分页的问题,非常不错,具有参考借鉴价值,需要的的朋友参考下吧

  9. IOS swift3.0 下闭包语法整理

    这篇文章主要介绍了IOS swift3.0 下闭包语法整理的相关资料,需要的朋友可以参考下

  10. iOS 中Swift仿微信添加提示小红点功能(无数字)

    这篇文章主要介绍了iOS 中Swift仿微信添加提示小红点功能(无数字),非常不错,具有参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部