ReactiveCocoa 간단한 사용
기존 네트워크 요청 패키지
-(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 _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 _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:@""];//
}
이러한 네트워크 요청은 완료되었으며, 아직 끝나지 않았습니다.
Demo
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.