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請求參數

? ? ? ? ?if method == .GET&&param !=""{

? ? ? ? ? ?if url.contains("?"){

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

? ? ? ? ? ? }else{

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

? ? ? ? ? ? }

? ? ? ? }

? ? // 注意這里需要將含有中文的參數進行編碼處理,否則創建URL 對象就會返回nil。

? ? ? url = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!

? ? ? ? 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請求工具就寫好了,是不是很簡單呢? 如果覺得可以記得關注我哦,如果有什么問題歡迎留言!

博客園地址:??猿哥愛碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。