新建繼承Object類app
類.h async
typedef void (^SuccessBlock)(id responseObject);post
typedef void(^FailureBlock)(NSString *error);url
@interface 類 : NSObjectspa
+ (void)getWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure;.net
+ (void)postWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure;code
類.morm
@implementation 類繼承
+ (void)getWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure{get
NSString *urlString = [NSString string];
if (params) {
NSString *paramStr = [self dealWithParam:params];
urlString = [url stringByAppendingString:paramStr];
}else{
urlString = url;
}
NSString *pathURL = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //URL中的中文轉碼
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:pathURL]];
request.timeoutInterval = 3;
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response,NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
success(dict);
}else{
NSHTTPURLResponse *httpResponse = error.userInfo[@"響應地址"];
if (httpResponse.statusCode != 0) {
NSString *ResponseStr = [self showErrorInfoWithStatusCode:httpResponse.statusCode];
failure(ResponseStr);
} else {
NSString *ErrorCode = [self showErrorInfoWithStatusCode:error.code];
failure(ErrorCode);
}
}
});
}];
[task resume];
}
+ (void)postWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:"POST"];
NSString *body = [self stringWithParam:params];
NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:bodyData];
request.timeoutInterval = 3;
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *_Nullable data,NSURLResponse *_Nullable response,NSErrror *_Nullable error){
if(data) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
success(dict);
}else {
NSHTTPURLResponse *httpResponse = error.userInfo[@"響應地址"];
if(httpResponse.statusCode != 0){
NSString *responseStr = [self showErrorWithStatusCode:httpResponse.statusCode];
failure(responseStr);
}else{
NSString *errorCode = [self showErrorWithStatusCode:error.code];
failure(errorCode);
}
}
}];
[task resume];
}
+ (NSString *)stringWithParam:(NSDictionary *)param
{
NSArray *allkeys = [param allKeys];
NSMutableString *result = [NSMutableString string];
for (NSString *key in allkeys) {
NSString *string = [NSString stringWithFormat:@"%@=%@&", key, param[key]];
[result appendString:string];
}
return result;
}
+ (NSString *)showErrorIWhthStatusCode:(NSInteger)statusCode{
NSString *messgae = nil;
switch (statusCode) {
case 1:{
message = @"請求成功";
}
break;
case 0:{
message = @"請求失敗!";
}
break;
default:{
}
break;
}
return message;
}