ReactiveCocoa 간단한 사용

3190 단어

기존 네트워크 요청 패키지

-(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 네트워크 요청 패키지


전통적인 인터넷 요청의 봉인에 관해서는 모두가 잘 알고 있으니, 여기는 더 이상 군더더기 없이 설명하지 않겠다.RACMVVM가 완벽하게 융합되어 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

좋은 웹페이지 즐겨찾기