小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

swift模型解析的两种方法

Swift学习 额外说明

收录于:52天前

1. 常规分析方法

//延迟加载语句LJ新闻模型是一个数据数组

懒惰的 多变的lj 数组:[LJ新闻模型] = [LJ新闻模型]()


//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) {
    }
}



. . .

相关推荐

额外说明

POI 直方图 x 轴多维

更多参考: https://blog.csdn.net/u014644574/article/details/105695787   <dependency> <groupId>org.apache.poi</groupId> <arti

额外说明

【Golang】✔️走进 Go 语言✔️ 第二十三课 UDP & TCP

【Golang】✔️走进 Go 语言✔️ 第二十三课 UDP & TCP 概述 UDP 通信 服务端 客户端 输出结果 TCP 服务端 客户端 输出结果 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界

额外说明

【JavaEE】IO 操作

文章目录 前言 什么是 IO Reader 读操作 1. 创建 Reader 类 2. 理解 Reader 类中的不同 read 方法 3. 使用 Reader 类当中的不同 read 方法 3. 关闭文件操作 Writer 写操作 1. 创建出 Wri

额外说明

HNU数据结构与算法分析-小班8

HNU数据结构与算法分析-小班8                                                                                                              

额外说明

mysql root用户密码忘记,重置的操作

1: 通过任务管理器或者服务管理,关掉mysqld(服务进程) 2: 通过命令行+特殊参数开启mysqld mysqld --defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.i

额外说明

Vue.extend + vm.$mount 动态加载组件

前提是组件模板已定义好,例如组件 AComponents.vue <template> <h1>这是 A 组件.</h1> </template> <script> export default { name: 'AComponents'

额外说明

《Leaflet 基础知识点》- 天地图添加、删除和透明度设置

目录 一. 地图容器初始化 二. 添加 矢量 + 注记 影像 + 注记 EPSG 3857 与 4326 差异 三. 删除 四. 透明度 一. 地图容器初始化 let map = L.map('map', { //参考坐标系 crs: L

额外说明

【springcloud学习笔记】Eureka服务治理demo

一、描述 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动

额外说明

wordpress邮箱订阅_如何允许用户在WordPress中订阅类别

WordPress 电子邮件订阅 WordPress comes with built-in taxonomies, 类别和标签, that allows you to organize your content. Almost every WordPr

ads via 小工具