信号的信号?反应性 Cocoa

Signal of Signals ? Reactive Cocoa

我试图理解这段代码以及为什么它 returns 信号中的信号。

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

根据我的理解,UIControlEventTouchupInside returns 下一个信号在映射函数中展开时包含 UIButton。

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

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

谢谢,我是新手,有什么建议就好了!

另一个相关问题,

假设 uicontrol 事件在 sends 和 error 事件中触发,它会被订阅的下一个错误捕获吗?

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

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

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