ios swift 打造自己的http請求工具
在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&¶m != ""{
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請求工具