我试图理解这段代码以及为什么它会返回信号信号。
[[[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事件触及内部发送和错误事件,是否会被订阅下一个错误捕获?
答案 0 :(得分:4)
代码看起来不正确。您理解代码接收按钮的信号并将其映射到"登录信号"的信号是正确的。是的,信号的信号。虽然信号信号很常见且非常有用,但如果不使用这三个运算符之一,它将无效:flatten
,concat
或switchToLatest
。在给定的代码中,永远不会触发signInSignal
,因为没有使用这些运算符。
如果您将map:
切换为flattenMap:
,则会正确启动登录信号。
[[[self.signInButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
flattenMap:^id(id x) {
return [self signInSignal];
}]
subscribeNext:^(id x) {
NSLog(@"Sign in result: %@", x);
}];