网络请求

来源:互联网 发布:php form表单提交 编辑:程序博客网 时间:2024/06/05 06:37

标题  网络请求

主题


前提需要用pod 导入 Alamofire SwiftyJSON 这两个包

1.先建立一个请求json数据的方法(request文件夹)


class RequestClient:NSObject 类


class func RequestData(url:String,params: [String: String], callback: (String?, JSON?) -> (Void)){
          Alamofire .request(.GET,url,parameters: params) .responseJSON() { response in
                 if response.result.isSuccess{
                        let json = JSON(response.result.value!)
                        callback(nil, json)

                }
               else{
                      print("数据加载失败")

               }

            }
        }

2.建立了json请求数据需要处理所以需要一个方法来解析获得的数据(viewmodel)

//didgetdata 顾名思义,就是已将获取到的数据类型一个闭包,以后调用数据的话直接调用这个闭包

enum RequestUrls: String {


    case BANNER = "http://qt.qq.com/static/pages/news/phone/c13_list_1.shtml"

}


     var didGetData: (([JSONModel]) -> (Void))?   采用协议

      func getData() {


 //把所有要请求的数据写成一个枚举,以后直接调用

        RequestClient.RequestData(RequestUrls.BANNER.rawValue, params: [:],callback: {error, json in

            if let err = error {

                print(err)

            }else {

                let jsonArr = json!["list"].arrayValue        

                var result: [JSONModel] = []

// json arr 就是 json 里的数据

                for jsonItem in jsonArr {

                    let bannerModel = BannerModel()

//这里调用的还是一个反射的方法

                    let handler = BasicJSONHandler(jsonModel: bannerModel)

                    let realModel = handler.handleJSON(jsonItem)

                    result.append(realModel)

                }

              self.didGetData?(result)   

            }  

        })

    }



3.反射json数据(manager 一个文件夹里需要好多东西)

//jsonHandeler 是一个协议,谁调用它谁就要采用这个协议

class BasicJSONHandler: NSObject, JSONHandler { 

 var jsonModel: JSONModel    

init(jsonModel: JSONModel) {

        self.jsonModel = jsonModel  后面的jsonmodel 是一个父类 ,所有的Model类都是继承于这个类,所有初始化都必须在super init 调用之前实现

        super.init()

    }

    实现反射的方法  同时也是实现协议

    func handleJSON(json: JSON) -> JSONModel {

        //json即时第一个model里的数据

        let mirror = Mirror(reflecting: jsonModel)

        for item in mirror.children {

            if let label = item.label {

                jsonModel.setValue(json[label].stringValue, forKey: label)

            }

        }

        return jsonModel

    }

    

}


4.y本人自学整理有不对的多多指教



0 0
原创粉丝点击