【问题标题】:Signal of Signals ? Reactive Cocoa信号的信号?反应性可可
【发布时间】:2015-02-20 02:15:48
【问题描述】:

我正在尝试理解这段代码以及它为什么返回信号的信号。

[[[self.signInButton
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   map:^id(id x) {
     return [self signInSignal];
   }]
   subscribeNext:^(id x) {
     NSLog(@"Sign in result: %@", x);
   }];

据我了解,UIControlEventTouchupInside 在地图函数中展开时会返回一个包含 UIButton 的下一个信号。

因此,可以安全地得出结论,当我执行映射时,它期望返回的对象是一个对象(恰好是一个信号),并且它将信号双重包装成一个信号。那是反应可可通常期望类型是对象类型并将其包装成信号?

或者

这里是不是漏了什么,我对Map的理解不如下, 它转换输入值,并产生一个输出值,(有时独立于输入值)

谢谢我是新手,任何建议都会很好!

另一个相关问题,

让我们说 uicontrol 事件在发送和错误事件中发生了变化,它会被订阅下一个错误捕获吗?

【问题讨论】:

  • 这是一个很好的了解ReactiveCocoa的教程
  • 那是我从那里获得代码的地方

标签: objective-c reactive-programming reactive-cocoa


【解决方案1】:

代码看起来不正确。您正确理解代码获取按钮点击信号并将其映射到“登录信号”信号。是的,一个信号的信号。虽然信号的信号很常见且非常有用,但如果不使用以下三个运算符之一,它将什么也做不了:flattenconcatswitchToLatest。在给定的代码中,signInSignal 永远不会被触发,因为没有使用这些运算符。

如果将map:切换为flattenMap:,登录信号将正常启动。

[[[self.signInButton
    rac_signalForControlEvents:UIControlEventTouchUpInside]
    flattenMap:^id(id x) {
        return [self signInSignal];
    }]
    subscribeNext:^(id x) {
        NSLog(@"Sign in result: %@", x);
    }];

【讨论】:

  • 此示例的代码不正确。因此,从这个意义上说,map 函数的行为方式与基于 pull 的流的 map 函数的行为方式不同,即它创建一个新对象并将该新对象放入数组中?相反,地图功能将 1. 传入信号(uibutton*) 2. 从信号中解包(uibutton*) 3. 允许转换 ui 按钮。 4a.在这种情况下,如果我们返回一个信号,它将把信号包装在一个信号中 5b.导致一个信号的信号,否则如果它是一个对象类型 4b。将对象包装在信号 5b 中。产生一个信号
  • 我不确定你的问题是什么。能改一下吗?
  • 基于拉流的映射函数与基于推送流的映射函数的行为是否不同?
  • 还假设,UIContorlEventTouchUpInside 发送下一个错误,self signInSignal 会运行吗?
  • 拉取与推送上的地图是否表现不同:不。
猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多