信号信号?活性可可

时间:2015-02-20 02:15:48

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

我试图理解这段代码以及为什么它会返回信号信号。

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

根据我的理解,UIControlEventTouchupInside在map函数中解包时返回包含UIButton的下一个信号。

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

或者

我在这里遗漏了什么,而且我对地图的理解不如下, 它转换输入值,并产生输出值(有时独立于输入值)

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

另一个相关问题,

让我们说uicontrol事件触及内部发送和错误事件,是否会被订阅下一个错误捕获?

1 个答案:

答案 0 :(得分:4)

代码看起来不正确。您理解代码接收按钮的信号并将其映射到"登录信号"的信号是正确的。是的,信号的信号。虽然信号信号很常见且非常有用,但如果不使用这三个运算符之一,它将无效:flattenconcatswitchToLatest。在给定的代码中,永远不会触发signInSignal,因为没有使用这些运算符。

如果您将map:切换为flattenMap:,则会正确启动登录信号。

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