今天接上篇文章OC转swift3.0实战 (三)网络层初探,废话不多说,直接干。
先看下接口返回的整体数据,
现在我要拿到focusImages
字典下的pic
一.类似的,学OC封装下网络请求的工具
详细的见本人的另一篇文章Swift3.0系列之基于Alamofire4.0网络层封装
二.新建一个swift文件,将所有的API请求写在该文件下
import UIKit
let saleAPI = "xxxxxxxxxxx?channel=ios-b1&device=iPhone&includeActivity=true&includeSpecial=true&scale=2&version=5.4.21"
class ZLMSaleAPI: NSObject {
class func requestSaleData(_ finished:@escaping (_ result:AnyObject? ,_ error:NSError?)->()){
NetworkTools.shareInstance.requestData(methodType: .GET, urlStr: saleAPI, parameters: nil){
(result,error)in
finished(result,error)
}
}
}
三.这里建model不多说(我只取自己要的字段),两个model
import UIKit
import HandyJSON
struct ZLMSaleColumns: HandyJSON {
var code: Int?
var codeMessage: String?
var type: String?
var list:[ZLMSaleModel]?
required init(){}
}
图片数组的model
import UIKit
import HandyJSON
struct ZLMSaleModel: HandyJSON {
var pic :String?
required init(){}
}
从上看出通过HandyJSON建立的model有个固定格式
import UIKit
import HandyJSON
struct model名:HandyJSON{
....
你所需要的字段
....
required init(){}
}
四.最后一步在controller里的事
1.先导入两个库
import SwiftyJSON
import HandyJSON
2.新建两个model的对象
var focusImagesColumns:ZLMSaleColumns!
var listArr:Array<ZLMSaleModel?> = []{ didSet { setDataSource() } }
setDataSource()函数
func setDataSource() {
tableview.reloadData()
}
3.在生命周期viewDidLoad()中调用获取Data数据的函数
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
self.automaticallyAdjustsScrollViewInsets = true
self.view.addSubview(tableview)
refreshData()//获取数据
}
refreshData()函数的实现
func refreshData() {
ZLMSaleAPI.requestSaleData{[unowned self](result,error) in
if error != nil{
print(error as Any)//暂时做打印处理
}else{
let json = JSON(result as Any)//SwiftyJSON将获取到的数据解析成json
let focusImagesColumns = JSONDeserializer<ZLMSaleColumns>.deserializeFrom(json:json["focusImages"].description)//HandyJSON将其映射到BaseModel中去
self.focusImagesColumns = focusImagesColumns
let listArray = self.focusImagesColumns.list
self.listArr = listArray!//将focusImages下的list映射到pic所在的model中
}
}
}
以上。