ReactiveCocoa 简介 - 订阅

优质
小牛编辑
129浏览
2023-12-01

当你随时都想知道某一个值的改变时(不管是next、error或者completion),你就会订阅流—-一种最常见的signal.使用信号通常都会有副作用,比如下面这个例子。

  我们添加一个textfield控件到viewController’s View上,这里我使用storyboard来做,你怎么做随你喜好。

adding_a_text_field

在ViewDidLoad中添加如下代码,订阅textfield的rac_textSignal。

  1. [self.textField.rac_textSignal subscribeNext:^(id x){
  2. NSLog(@"New Value: %@",x);
  3. } error:^(NSError * error){
  4. NSLog(@"Error : %@", error);
  5. } completed:^{
  6. NSLog(@"Completed.");
  7. }];

创建并运行应用程序,在textField上输入一些内容。每一次每一个新的值输入到textField中,这个Next value就会下发到管道中,然后我们的订阅块就会被执行。

inputSomethingToTextField

有趣的是,这个特殊的信号不会发送错误值,仅仅在释放的时候发送一个完成值,所以这两个订阅块通常不会被调用。我们可以使用RACSignal上的一个简便的方法subsribeNext:来简化我们的代码:

  1. [self.textField.rac_textSignal subscribeNext:^(id x){
  2. NSLog(@"New Value: %@", x);
  3. }];

看吧,少了很多代码!

当你订阅一个信号时,实际上你创建了一个’订阅者’,她是自动保留的,并同时保留她订阅的信号,你也可以手动配置这个‘订阅者’,但这不是一种典型的行为。下一章我们将会学习,当视图复用的时候(像CollectionViewCells 或TableViewCells),如何去有效地配置信号。