美文网首页
RACCommand封装网络请求(配合猿题库)

RACCommand封装网络请求(配合猿题库)

作者: 下班不写程序 | 来源:发表于2020-12-23 11:40 被阅读0次

1. 便于理解的使用方法

  • viewModel.h内容
@property (nonatomic, copy) NSString *username;

@property (nonatomic, copy) NSString *password;

@property (nonatomic, strong) RACCommand *loginButtonCommand;
  • viewModel.m内容
- (instancetype)init {
    self = [super init];
    if (self) {
        
        RACSignal *usernameSingal = [RACObserve(self, username) map:^id _Nullable(id  _Nullable value) {
            
            if ([(NSString *)value length] > 6) {
                return @(YES);
            } else {
                return @(NO);
            }
        }];
        
        RACSignal *passwordSingl = [RACObserve(self, password) map:^id _Nullable(id  _Nullable value) {
            
            if ([(NSString *)value length] > 6) {
                return @(YES);
            } else {
                return @(NO);
            }
        }];
        
        RACSignal *loginSingl = [RACSignal combineLatest:@[usernameSingal, passwordSingl] reduce:^id (NSNumber *username, NSNumber *password){
            return @([username boolValue] && [password boolValue]);
        }];
        
        self.loginButtonCommand = [[RACCommand alloc] initWithEnabled:loginSingl signalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
            return [self loginWithUserName:self.username password:self.password];
        }];
    }
    return self;
}

- (RACSignal *)loginWithUserName:(NSString *)name password:(NSString *)passWord {
    
    return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:[NSString stringWithFormat:@"姓名:%@ 密码:%@",self.username, self.password]];
        [subscriber sendCompleted];
        return nil;
    }];
}
  • 控制器的.m内容

定义vm属性

@property (nonatomic, strong) LoginViewModel *viewModel;

绑定信号

    self.LoginButton.rac_command = self.viewModel.loginButtonCommand;
    RAC(self.viewModel, username) = self.usernameTextfield.rac_textSignal;
    RAC(self.viewModel, password) = self.passwordTextfield.rac_textSignal;

登录点击事件

    [[self.viewModel.loginButtonCommand executionSignals] subscribeNext:^(id  _Nullable x) {
       
        [x subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
    }];

以上就是最简单的使用方法了

2. 结合猿题库网络请求框架

可参见demo

  1. ViewMode内容


    ViewMode.h ViewMode.m 控制器中使用

.End

相关文章

  • RACCommand封装网络请求(配合猿题库)

    1. 便于理解的使用方法 viewModel.h内容 viewModel.m内容 控制器的.m内容 定义vm属性 ...

  • 猿题库iOS端架构设计

    猿题库iOS架构设计 猿题库网络请求设计和封装思想

  • 今日所学20160114

    这几天用Keynote总结了网络请求逻辑,主要包括一般网络请求+瀚银网络请求+猿题库网络请求+AFNetworki...

  • RACComment用法

    RACCommand RACCommand的普通使用 一般情况下,RACCommand主要用来封装一些请求,事件等...

  • RACCommand用于网络请求

    RACCommand用于网络请求

  • iOS常用开源库

    网络YTKNetwork:唐巧所在公司猿题库开发的基于AFNetworking封装的网络库,支持并发、批量、串行网...

  • YTKNetwork解析

    YTKNetwork是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,提供了更高层...

  • YTKNetwork源码解析

    YTKNetwork 是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,其实现了一...

  • YTKNetwork源码阅读

    关于YTKNetwork YTKNetwork是猿题库开发的一套基于AFNetworking的网络请求库,提供将A...

  • YTKNetWork源码阅读

    YTKNetWork是猿题库的团队出的一个基于AFNetWork的网络请求框架,它对请求结果的缓存和接口版本管理做...

网友评论

      本文标题:RACCommand封装网络请求(配合猿题库)

      本文链接:https://www.haomeiwen.com/subject/gmasnktx.html