您的位置:首页 > Web前端 > React

ReactiveCocoa应用---NSURLSession封装

2016-07-15 10:22 337 查看

ReactiveCocoa应用1—-NSURLSession封装

+ (RACSignal *)fetchJSONFromSession:(NSURLSession *)session withRequest:(NSURLRequest *)request {
return [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber)
{
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
if (! error) {
NSError *jsonError = nil;
NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
if (! jsonError) {
NSDictionary *dataOfDictionary = (NSDictionary *)json;
if (dataOfDictionary[@"stat"] && [dataOfDictionary[@"stat"] integerValue] == 0)
{
[subscriber sendNext: json[@"data"]];
[subscriber sendCompleted];
}else{
NSString *errmsg = dataOfDictionary[@"msg"];
if (![errmsg isKindOfClass:[NSString class]]) {
errmsg = @"服务器未知错误";
}
[subscriber sendError:[NSError errorWithDomain:[AppConstants httpHost] code:[dataOfDictionary[@"stat"] integerValue] userInfo:@{NSLocalizedDescriptionKey:errmsg}]];
}
}
else {
DDLogError(@"function: json 组装错误:%@", [jsonError localizedDescription]);
if (jsonError != nil) {
[subscriber sendError:jsonError];
}
}
}
else {
DDLogError(@"function: dataTask error: %@", [error localizedDescription]);
[subscriber sendError:error];
}

}];

[dataTask resume];

return [RACDisposable disposableWithBlock:^{
[dataTask cancel];
}];
}] logError] replayLazily];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: