传统网络请求封装
-(void)requestDataWithUrl:(NSString *)url dict:(NSDictionary *)parameters andSucc:(void (^)(id response))succBlock andFail:(void (^)(NSError *error))failBlock{
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
//这里添加一些请求头,userAgent,超时时间
[manager GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (succBlock) {
succBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if(failBlock){
failBlock(error);
}
}];
}
ReactiveCocoa网络请求封装
关于传统的网络请求的封装,大家都很熟悉,这里就不再赘述了。RAC
和MVVM
完美融合,所以使用MVVM
的小伙伴一旦进入RAC
的世界就再也走不出来了。下面让我们一起走入他的世界吧。
-(RACSignal *)requestManagerWithUrl:(NSString *)url params:(NSDictionary *)params{
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
//这里添加一些请求头,userAgent,超时时间
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {
[subscriber sendNext:responseObject[@"data"]];
[subscriber sendCompleted];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[subscriber sendNext:error];
}];
return nil;
}];
}
这里我们所有的返回结果都根据信号的方式返回了,不再需要在一个方法里面写一堆block
。当然接下来讲的就是如何使用了,viewModel
中处理网络请求
-(RACCommand *)requestCommand{
if (!_requestCommand) {
_requestCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//网络请求
[[LQNetWorkManager requestManagerWithUrl:@"" params:@{}] subscribeNext:^(id _Nullable x) {
/*正常请求在这里面处理
*这里处理一些网络返回值 json-->model
*处理数据后subscriber返回
*/
[subscriber sendNext:x];
[subscriber sendCompleted];
} error:^(NSError * _Nullable error) {
[subscriber sendError:error];
}];
return nil;
}];
}];
}
return _requestCommand;
}
在VC中回调
- (void)viewDidLoad {
[super viewDidLoad];
[self.viewModel.requestCommand.executionSignals.switchToLatest subscribeNext:^(id _Nullable x) {
//网络请求完成
NSLog(@"%@",x);
}];
[self.viewModel.requestCommand.errors subscribeNext:^(id _Nullable x) {
//网络请求出错处理
NSLog(@"信号错误");
}];
[self.viewModel.requestCommand execute:@""];//发送网络请求
}
这样一个网络请求就完成了,未完待续
网友评论