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