详解Swift model 解析的两种方法
程序员文章站
2023-12-18 14:55:28
详解swift model 解析的两种方法
1. 常规解析方法
//懒加载声明一个ljnewsmodel为数据的数组
lazy var ljarr...
详解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) { } }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!