美文网首页
4.处理网络请求URLRequest

4.处理网络请求URLRequest

作者: noonez | 来源:发表于2016-03-25 14:55 被阅读1564次

三个类:NetworkRequest处理网络请求,JSONParse处理数据转化,JSONRequest请求网络数据并转化
语言:Swift3.0
NetworkRequest

import UIKit

class NetworkRequest: NSObject {
    static func request(url:String, para:String?, result:@escaping (Data?, _ error:String?)->Void){
        if let tmpURL = URL(string:url) {
            var request = URLRequest(url: tmpURL)
            request.httpMethod = "POST"
            let sessionConfig = URLSessionConfiguration.default
            sessionConfig.timeoutIntervalForRequest = 20
            let session = URLSession(configuration: sessionConfig)
            let body = para?.data(using: String.Encoding.utf8)
            let task = session.uploadTask(with: request, from: body, completionHandler: {
                (data, response, error) ->Void in
                if error != nil {
                    result(nil, error!.localizedDescription)
                    return;
                }
                result(data, nil)
            })
            task.resume()
        }else{
            result(nil, "请求地址出错")
        }
    }
}

数据相互转化:json转对象,对象转json

import UIKit

class JSONParse: NSObject {
    /**
     对象转成JSON数据
    **/
    static func toJSON(data:Any)->Data? {
        if JSONSerialization.isValidJSONObject(data) {
            do{
                let result = try JSONSerialization.data(withJSONObject: data, options: [])
                return result
            }catch{
                print("JOSN化失败")
            }
        }
        return nil
    }
    /**
     JSON数据转成对象
    **/
    static func toAny(json:Data)->Any?{
        do{
            let result = try JSONSerialization.jsonObject(with: json, options: [])
            return result
        }catch{
            print("转化失败")
        }
        return nil
    }
}

将两个功能结合起来,获取完json数据结果后转为对象结果返回

import UIKit

class JSONRequest: NSObject {
    /**
     请求返回后将json数据转化为对象数据
    **/
    static fileprivate var result:((Any?, _ error:String?)->Void)?
    static func jsonRequest(url:String, para:String, result:@escaping (Any?, _ error:String?)->Void)->Void{
        self.result = result
        NetworkRequest.request(url: url, para: para, result: requestResult)
    }
    static fileprivate func requestResult(data:Data?, error:String?)->Void{
        if data != nil {
            if let tmp = JSONParse.toAny(json: data!) {
                self.result?(tmp, error)
                return
            }else{
                self.result?(nil, "转化失败")
                return
            }
        }
        self.result?(nil, error)
    }
}

Example:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        JSONRequest.jsonRequest(url: "https://www.gn100.com/interface/login", para: "", result: {
            (data, error) in
            if error != nil {
                print(error!)
            }else{
                print(data!)
            }
        })
        print("ffff")
    }
}

源码:https://github.com/ghyh22/NetworkRequest

相关文章

  • 4.处理网络请求URLRequest

    三个类:NetworkRequest处理网络请求,JSONParse处理数据转化,JSONRequest请求网络数...

  • Egret网络通讯

    URLRequest、URLLoader URLRequest类封装了进行HTTP请求所需要的所有信息。 常用的H...

  • ParameterEncoding Alamofire

    每一个请求都是通过URLRequest来进行封装的,可以通过一个URL生成URLRequest。那么如果我有一个参...

  • Android通用流行框架大全

    Android通用流行框架大全 1. 缓存 2.图片加载 3. 图片处理 4. 网络请求 5. 网络解析 6. 数...

  • Alamofire-Response

    response为数据请求响应结果,封装了URLRequest、时间轴、请求错误信息,请求成功的数据等信息,方便开...

  • 苹果Network部分文档翻译第三章:NSURLRequest

    代表URL的加载的请求,桥接对象:URLRequest 概述 NSURLRequest包装了加载请求的两个基本数据...

  • Swift-URLRequest Extension

    通过URL创建URLRequest 资源来自网络和日常整理,持续更新

  • URLRequest

    与协议或URL方案无关的URL加载请求 Declaration Overview URLRequest封装了加载请...

  • axios的封装

    效果图: 封装包括 1.多个请求使用唯一Loading的处理。2.网络超时的处理。3.断网情况下的处理。4.去除重...

  • vue_axios请求封装、异常拦截统一处理

    1、前端网络请求封装、异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成...

网友评论

      本文标题:4.处理网络请求URLRequest

      本文链接:https://www.haomeiwen.com/subject/kmfdlttx.html