我试图理解这段代码,以及为什么它会返回信号信号。
[[[self.signInButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
map:^id(id x) {
return [self signInSignal];
}]
subscribeNext:^(id x) {
NSLog(@"Sign in result: %@", x);
}];据我所知,UIControlEventTouchupInside返回一个包含在map函数中的UIButton的下一个信号。
因此,从这里可以安全地得出结论,当我执行映射时,它期望返回的对象是一个对象(碰巧是一个信号),它将信号双重包装成一个信号。也就是说,活性可可通常希望这种类型是一个对象类型,并将其包装成一个信号?
或
我是不是在这里遗漏了什么,我对Map的理解不是这样的,它转换了输入值,并产生了一个输出值(有时独立于输入值)
谢谢,我是新手,任何建议都会很好!
另一个相关的问题,
让我们简单地说,uicontrol事件在发送和错误事件中发生了接触,它会被订阅下一个错误捕获吗?
发布于 2015-02-20 06:29:15
代码看上去不正确。您正确地理解了代码接收按钮点击的信号并将其映射到“登录信号”的信号。是的,信号的信号。虽然信号信号是常见的和非常有用的,但如果不使用这三个操作符中的一个: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);
}];https://stackoverflow.com/questions/28620606
复制相似问题