ios 基于NSConnection简单封装的工具类
2015-10-15 11:11
579 查看
接口文件
实现部分
// // HTTPRequest.h // // Created by Jason_Msbaby on 15/10/9. // Copyright © 2015年 张杰. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, HttpMethod) { HttpMethodGet = 0, HttpMethodPost = 1 }; /** * 封装了NSURLCollection网络请求 返回的回调函数会在主线程中执行 */ @interface HTTPRequest : NSObject /** * 获取实例 * * @return 返回当前单例对象 */ +(instancetype)defaultRequest; /** * 发送请求的方法 * * @param url 请求地址 字符串类型 * @param method 请求类型 get post 枚举类型 * @param parameters 参数 不论是get请求 或者是post请求 都存放于此 字典类型 * @param headers 请求头 字典类型的键值对 * @param success 返回成功的回调函数 * @param failure 返回失败的回调函数 * @param finish 无论返回成功或者失败 都会触发的回调函数 */ -(void)sendWithUrl:(NSString*)url Method:(HttpMethod)method Parameters:(NSDictionary*)parameters Headers:(NSDictionary *)headers Success:(void (^)(NSDictionary *data))success Failure:(void(^)(NSError *error))failure Finish:(void(^)())finish; @end
实现部分
// // HTTPRequest.m // douBan // // Created by Jason_Msbaby on 15/10/9. // Copyright © 2015年 张杰. All rights reserved. // #import "HTTPRequest.h" static HTTPRequest *request; @interface HTTPRequest () @end @implementation HTTPRequest +(instancetype)defaultRequest{ if (request == nil) { request = [HTTPRequest new]; } return request; } -(void)sendWithUrl:(NSString*)url Method:(HttpMethod)method Parameters:(NSDictionary*)parameters Headers:(NSDictionary *)headers Success:(void (^)(NSDictionary *data))success Failure:(void(^)(NSError *error))failure Finish:(void(^)())finish { //获取参数内容 NSString *para = nil; if (parameters != nil) { NSMutableString *paraString = [NSMutableString string]; for (int i = 0; i < parameters.count; i++) { NSString *key = [NSString stringWithFormat:@"%@",parameters.allKeys[i]]; NSString *value = [NSString stringWithFormat:@"%@",parameters.allValues[i]]; [paraString appendString:key]; [paraString appendString:@"="]; [paraString appendString:value]; [paraString appendString:@"&"]; } para = [paraString substringToIndex:paraString.length-1]; } //封装request NSMutableURLRequest *req = nil; if (method == HttpMethodPost) { req.HTTPMethod = @"POST"; NSURL *nsurl = [NSURL URLWithString:url]; req = [NSMutableURLRequest requestWithURL:nsurl]; NSData *paraData = [para dataUsingEncoding:NSUTF8StringEncoding]; [req setHTTPBody:paraData]; }else if(method == HttpMethodGet){ req.HTTPMethod = @"GET"; NSURL *nsurl = [NSURL URLWithString:[NSString stringWithFormat:@"%@?%@",url,para]]; req = [NSMutableURLRequest requestWithURL:nsurl]; } //封装header if (headers != nil) { for (int i = 0; i < headers.count; i++) { NSString *key = headers.allKeys[i]; NSString *value = headers.allValues[i]; [req addValue:value forHTTPHeaderField:key]; } } //发送请求 [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSHTTPURLResponse *res = (NSHTTPURLResponse*)response; if ( connectionError || res.statusCode != 200) { if (failure != nil) { failure(connectionError); } } if (res.statusCode == 200) { if (success!=nil) { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; success(dic); } } if (finish != nil) { finish(); } }]; } @end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- 解析iOS开发中的FirstResponder第一响应对象
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- 基于UIControl控件实现ios点赞功能