美文网首页
ReactiveCocoa笔记1

ReactiveCocoa笔记1

作者: wata | 来源:发表于2018-02-09 15:05 被阅读4次

ReactiveCocoa笔记

  1. map:方法可以转换信号,将一个信号处理后转变为另一个信号,例如:
RACSignal *validUsernameSignal = [self.usernameTextField.rac_textSignal
      map:^id(NSString *text) {
        return @([self isValidUsername:text]);
      }];
  1. RAC(TARGET, ...)宏可以用keyValue的方式使用信号中的值给object的key赋值,例如:
RAC(self.passwordTextField, backgroundColor) =
    [validPasswordSignal
      map:^id(NSNumber *passwordValid) {
        return [passwordValid boolValue] ? [UIColor clearColor] : [UIColor yellowColor];
      }];
  1. combineLatest:方法可以组合多个信号,变为一个信号,例如:
RACSignal *signUpActiveSignal =
    [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]
                      reduce:^id(NSNumber *usernameValid, NSNumber *passwordValid) {
                        return @([usernameValid boolValue] && [passwordValid boolValue]);
                      }];
  1. doNext:可以添加signal流的响应事件而不改变当前的管道流,我们称它为side-effect,side-effect不改变信号的转变,只是做出响应:例子如下:
[[[[self.signInButton
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   doNext:^(id x) {
     self.signInButton.enabled = NO;
     self.signInFailureText.hidden = YES;
   }]
   flattenMap:^id(id x) {
     return [self signInSignal];
   }]
   subscribeNext:^(NSNumber *signedIn) {
     self.signInButton.enabled = YES;
     BOOL success = [signedIn boolValue];
     self.signInFailureText.hidden = success;
     if (success) {
       [self performSegueWithIdentifier:@"signInSuccess" sender:self];
     }
   }];
  1. flattenMap:可以取出signal的signal.当我们使用map:的时候,直接return一个value,系统便会自动封装成一个新的signal.但是当返回的value本身就是一个signal的时候,系统还是会帮我们在包一层signal, 所以,这种情况下,我们取药的是最里面的signal,而不是系统在外层帮我们包裹的signal.所以这种情况下就会使用flattenMap:而不是map:,还是上面的代码
[[[[self.signInButton
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   doNext:^(id x) {
     self.signInButton.enabled = NO;
     self.signInFailureText.hidden = YES;
   }]
   flattenMap:^id(id x) {
     return [self signInSignal];
   }]
   subscribeNext:^(NSNumber *signedIn) {
     self.signInButton.enabled = YES;
     BOOL success = [signedIn boolValue];
     self.signInFailureText.hidden = success;
     if (success) {
       [self performSegueWithIdentifier:@"signInSuccess" sender:self];
     }
   }];

详细工程参见raywenderlich上的

ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2

相关文章

  • ReactiveCocoa笔记1

    ReactiveCocoa笔记 map:方法可以转换信号,将一个信号处理后转变为另一个信号,例如: RAC(TAR...

  • ReactiveCocoa笔记1

    RACSignal 简单使用 订阅信号 取消订阅信号

  • ReactiveCocoa学习笔记(1)

    title: ReactiveCocoa学习笔记(1)date: 2016-11-16 18:06:05categ...

  • ReactiveCocoa 学习笔记1

    一.编程思想 先简单介绍下目前咱们已知的编程思想。1.面向过程:处理事情以过程为核心,一步一步的实现。C语言是面向...

  • ReactiveCocoa理解笔记(1)

    之前做项目用到了ReactiveCocoa,当时只是知其然,不知所以然,很多都是根据用法示例找图画瓢。最近正好空闲...

  • RAC

    本篇文章是用来记录一下有关 ReactiveCocoa 的学习笔记。 简介 ReactiveCocoa(简称 RA...

  • [个人博客搬运]ReactiveCocoa学习笔记

    ReactiveCocoa学习笔记 前言 ReactiveCocoa是一个很有意思的FRP框架,用法简单,但是理解...

  • ReactiveCocoa进阶

    转载小码哥教学笔记,方便自己查看 1.ReactiveCocoa常见操作方法介绍。 1.1 ReactiveCoc...

  • ReactiveCocoa基础

    1.ReactiveCocoa(函数响应式编程 FRP) BeeFramework 与ReactiveCocoa ...

  • ReactiveCocoa学习之一

    ReactiveCocoa学习之一 1、ReactiveCocoa常见类 1.1、RACSiganl RACSig...

网友评论

      本文标题:ReactiveCocoa笔记1

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