用map还是flattenMap
新学习ReactiveCocoa,在困惑什么时候该用map:,什么时候该用flattenMap:。网上很多地方说如果是那种包含流的流(stream-of-streams)时,就要用flattenMap。我这边有段代码:
- (RACSignal *)signInSignal {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self.signInService signInWithUsername:self.usernameTextField.text
password:self.passwordTextField.text
complete:^(BOOL success) {
[subscriber sendNext:@(success)];
[subscriber sendCompleted];
}];
return nil;
}];
}
解释说这个方法会返回一个包含流的流(stream-of-streams),各位大牛能够解释下为什么吗?谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最近我也在学习RAC,不知道你的疑问解决了么?我的理解是这样的,RACSignal作为RACStream的子类,本身就具有流的概念,map和flattenMap的区别大概是:map只能一一对应的转换,就是一个源信号只能转换成一个新的信号输出,但是flattenMap是可以转换成一个流,就是需要根据这个源信号发出一系列的信号,实际上map的实现就是使用flattenMap生成仅含有一个信号(这个信号值就是map参数block的返回值)的流。也就是说,map是flattenMap在流中信号数量为1,而且信号值是block的返回值的特殊情况