三個類: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")
}
}