在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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 != ""{ 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请求工具就写好了,是不是很简单呢? 如果觉得可以记得关注我哦,如果有什么问题欢迎留言! 简书地址: Code人生 欢迎关注
|
请发表评论