1. 程式人生 > >ios swift 打造自己的http請求工具

ios swift 打造自己的http請求工具

ble capi afnetwork 處理 定義 起航 body tro ring

在ios開發中,網絡請求是不可以少的,說到網絡請求可能用的最多的就是第三方的比人比較有名的AFNetworking、Alamofire等,原生的用的少。今天就用ios提供的原生方法來打造屬於自己的一個網絡請求工具吧。大神的成長之路,現在就開始起航。

第一步:先建一個類比如叫 Http 如下:

//定義請求類型

enum HttpMethod {

case GET,

POST

}

//在http中定義類方法來做請求,方便使用

class Http {

class func request(method:HttpMethod, url:String,params:[String:Any]=[:],complete: @escaping(_result:String)->Void,error:@escaping(_error:Error?)->Void){

var url = url

//處理參數為了方便這裏抽取裏一個方法來處理參數

let param =self.parserParams(params: params)

//設置get請求參數

ifmethod == .GET&&param != ""{

url.append("?\(param)")

}

let_url =URL(string: url)!

let request =NSMutableURLRequest(url: _url)

//設置超時時間

request.timeoutInterval=50

//設置請求方式

request.httpMethod= method == .GET?"GET":"POST"

//設置post請求參數

if method == .POST&& param != ""{

request.httpBody=param.data(using: .utf8)

}

let session =URLSession.shared

let httpTask = session.dataTask(with: request as URLRequest) { (data,response ,err ) in

//在主線程中回調方便在界面處理數據邏輯

OperationQueue.main.addOperation {

if err !=nil{

//錯誤回調

error(err)

return

}

//請求成功將結果返回

complete(String(data: data!, encoding:String.Encoding.utf8)!)

}

}

//啟動任務

httpTask.resume()

}

//將字典轉換成網絡請求的參數字符串

private class func parserParams(params:[String:Any])->String{

var newStr=""

for param in params{

newStr.append("\(param.key)=\(param.value)&")

}

return newStr

}

}

第二步開始測試:在viewcontroller中調用,

class ViewController:UIViewController{

override func viewDidLoad() {

super.viewDidLoad()

let url = "http://api.budejie.com/api/api_open.php"

Http.request(method: .GET, url: url, params: ["a":"list","c":"data","type":1], complete: {r in

print("請求結果:",r)

}, error:{error in

print("請求出錯了:",error.debugDescription)

})

至此就這個簡單的http請求工具就寫好了,是不是很簡單呢? 如果覺得可以記得關註我哦,如果有什麽問題歡迎留言!

簡書地址: Code人生 歡迎關註

ios swift 打造自己的http請求工具