ios函数 二、三次封装和block作用
ios 中对常使用的模块或者公共模块做二次,三次封装,对已知api做二次封装,以更便于自己在项目中使用。
以下为例子:
+ (NSURLSessionDataTask *)requestDictionary:(void (^)(NSDictionary *, NSError *))block
withURL:(NSString *)url
parameter:(NSDictionary *)parameter
{
//NSLog(@"url====%@",url);
return [[SCAppAPIClient sessionManager] GET:url
parameters:parameter
success:^(NSURLSessionDataTask *task, id responseObject) {
NSString *successString = [[NSJSONSerialization JSONObjectWithData:responseObject
options:kNilOptions
error:NULL] objectForKey:@"Value"];
NSDictionary *resultDict;
if ([successString isEqualToString:@"success"]) {
resultDict = [[[NSJSONSerialization JSONObjectWithData:responseObject
options:kNilOptions
error:NULL] valueForKeyPath:@"SuccessInfo"] objectAtIndex:0];
}
if ([successString isEqualToString:@"failed"]) {
resultDict = [NSJSONSerialization JSONObjectWithData:responseObject
options:kNilOptions
error:NULL];
}
if (block) {
block([NSDictionary dictionaryWithDictionary:resultDict], nil);
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (block) {
block([NSDictionary dictionary], error);
}
}];
}
SCAppAPIClient sessionManager
获取到的是一个单利返回值,GET 后面一个方法为 api自带方法;
单利为
#import "SCAppAPIClient.h"
#import "Macros.h"
@implementation SCAppAPIClient
+ (instancetype)sessionManager
{
static SCAppAPIClient *_sessionManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sessionManager = [[self alloc] initWithBaseURL:[NSURL URLWithString:OFFICIAL_URL]];
_sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
_sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
});
return _sessionManager;
}
@end