ReactiveCocoa简介四,聚合信号

来源:互联网 发布:甲状腺癌消融 知乎 编辑:程序博客网 时间:2024/06/14 16:15

登录按钮只有当用户名和密码输入框的输入都有效时才工作。

combineLatest:reduce:方法把validUsernameSignal和validPasswordSignal产生的最新的值聚合在一起,并生成一个新的信号。每次这两个源信号的任何一个产生新值时,reduce block都会执行,block的返回值会发给下一个信号。

RACSignal *signUpActiveSignal =  [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]                    reduce:^id(NSNumber*usernameValid, NSNumber *passwordValid){                      return @([usernameValid boolValue]&&[passwordValid boolValue]);                    }];



已经有了合适的信号,这信号和按钮的enabled属性绑定。
[signUpActiveSignal subscribeNext:^(NSNumber*signupActive){   self.signInButton.enabled =[signupActive boolValue]; }];



CombinePipeline.png

  • 分割——信号可以有很多subscriber,也就是作为很多后续步骤的源。注意上图中那个用来表示用户名和密码有效性的布尔信号,它被分割成多个,用于不同的地方。

  • 聚合——多个信号可以聚合成一个新的信号,在上面的例子中,两个布尔信号聚合成了一个。实际上你可以聚合并产生任何类型的信号。

结果就是,代码中没有用来表示两个输入框有效状态的私有属性了。这就是用响应式编程的一个关键区别,你不需要使用实例变量来追踪瞬时状态。

0 0
原创粉丝点击