首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

OC转swift3.0 实践 (四)网络层实操

2024-12-20 来源:化拓教育网
整体结构.png

现在我要拿到focusImages字典下的pic

接口返回的数据.png

一.类似的,学OC封装下网络请求的工具

二.新建一个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中
            }
            
        }
    }

以上。

显示全文