在ios開發(fā)中亲轨,網(wǎng)絡(luò)請求是不可以少的醇坝,說到網(wǎng)絡(luò)請求可能用的最多的就是第三方的比人比較有名的AFNetworking扰柠、Alamofire等牡整,原生的用的少。今天就用ios提供的原生方法來打造屬于自己的一個網(wǎng)絡(luò)請求工具吧溺拱。大神的成長之路逃贝,現(xiàn)在就開始起航。
第一步:先建一個類比如叫 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
? ? ? ? //處理參數(shù)為了方便這里抽取里一個方法來處理參數(shù)
? ? let param =self.parserParams(params: params)
? ? ? ? //設(shè)置get請求參數(shù)
? ? ? ? ?if method == .GET&¶m !=""{
? ? ? ? ? ?if url.contains("?"){
?? ? ? ? ? ? ? url.append("&\(param)")
? ? ? ? ? ? }else{
? ? ? ? ? ? ? url.append("?\(param)")
? ? ? ? ? ? }
? ? ? ? }
? ? // 注意這里需要將含有中文的參數(shù)進(jìn)行編碼處理沐扳,否則創(chuàng)建URL 對象就會返回nil。
? ? ? url = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
? ? ? ? let_url =URL(string: url)!
? ? ? ? let request =NSMutableURLRequest(url: _url)
? ? ?//設(shè)置超時時間
? ? ? ? request.timeoutInterval=50
? ? ? ?//設(shè)置請求方式
? ? ? ? request.httpMethod= method == .GET ? "GET" : "POST"
?? ? ? ? //設(shè)置post請求參數(shù)
? ? ? ? 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
? ? ? ? ? ? //在主線程中回調(diào)方便在界面處理數(shù)據(jù)邏輯
? ? ? ? ? ? OperationQueue.main.addOperation {
? ? ? ? ? ? if err !=nil{
? ? ? ? ? ? //錯誤回調(diào)
? ? ? ? ? ? ? ? error(err)
? ? ? ? ? ? ? return
? ? ? ? ? ? }
? ? ? ? ? //請求成功將結(jié)果返回
? ? ? ? ? ? complete(String(data: data!, encoding:String.Encoding.utf8)!)
? ? ? ? ? ?}
? ? ? ? }
? ? ? ? //啟動任務(wù)
? ? ? ? httpTask.resume()
? ? }
? ? //將字典轉(zhuǎn)換成網(wǎng)絡(luò)請求的參數(shù)字符串
? ? private class func parserParams(params:[String:Any])->String{
? ? ? ? var newStr=""
? ? ? ? for param in params{
? ? ? ? ?newStr.append("\(param.key)=\(param.value)&")
? ? ? ? }
? ? ? ? ? return newStr
? ? }
}
第二步開始測試:在viewcontroller中調(diào)用,
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("請求結(jié)果:",r)
? ? ? ? }, error:{error in
? ? ? ? ? ? print("請求出錯了:",error.debugDescription)
? ? ? ? })
至此就這個簡單的http請求工具就寫好了句占,是不是很簡單呢? 如果覺得可以記得關(guān)注我哦沪摄,如果有什么問題歡迎留言!
博客園地址:??猿哥愛碼