ReactiveCocoa 订阅 flattenmaped 信号的完成事件
ReactiveCocoa subscribe to completed event of flattenmaped signal
这是我的代码片段。问题是它没有到达 subscribeCompleted 块。它应该立即完成,因为我 return flattenmap 块内的空信号。不是吗?
RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
self.tabBarController?.showHud("Updating Profile")
}.flattenMap { (object) -> RACStream! in
return RACSignal.empty()
}.subscribeCompleted { () -> Void in
log.error("Completed")
self.tabBarController?.hideHud()
}
flattenMap可以看作是把整个信号变成空信号的concat,完成后会等到每个空信号都完成(被flattenMapped的信号完成)后才会发送
flattenMap
返回的信号只有在"source"信号完成时才会完成。在您的情况下,您将 flattenMap
运算符应用于以下信号:
RACObserve(self.object, "mobile").skip(2)
RACObserve
返回的信号仅在被观察的对象被释放时才完成。根据您想要实现的目标,您可以使用一些运算符来转换信号并获得另一个更早完成的运算符。
例如,您可以使用 filter
和 take
,以便生成的信号在发送符合某些条件的第一个值后完成:
RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
self.tabBarController?.showHud("Updating Profile")
}.filter {
//some filtering for the value of self.object.mobile
return [=10=].checkSomeConditions()
}.take(1)
.subscribeCompleted { () -> Void in
log.error("Completed")
self.tabBarController?.hideHud()
}
请注意,您甚至根本不需要 flattenMap
。由于 take
运算符,信号将简单地完成。
这是我的代码片段。问题是它没有到达 subscribeCompleted 块。它应该立即完成,因为我 return flattenmap 块内的空信号。不是吗?
RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
self.tabBarController?.showHud("Updating Profile")
}.flattenMap { (object) -> RACStream! in
return RACSignal.empty()
}.subscribeCompleted { () -> Void in
log.error("Completed")
self.tabBarController?.hideHud()
}
flattenMap可以看作是把整个信号变成空信号的concat,完成后会等到每个空信号都完成(被flattenMapped的信号完成)后才会发送
flattenMap
返回的信号只有在"source"信号完成时才会完成。在您的情况下,您将 flattenMap
运算符应用于以下信号:
RACObserve(self.object, "mobile").skip(2)
RACObserve
返回的信号仅在被观察的对象被释放时才完成。根据您想要实现的目标,您可以使用一些运算符来转换信号并获得另一个更早完成的运算符。
例如,您可以使用 filter
和 take
,以便生成的信号在发送符合某些条件的第一个值后完成:
RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
self.tabBarController?.showHud("Updating Profile")
}.filter {
//some filtering for the value of self.object.mobile
return [=10=].checkSomeConditions()
}.take(1)
.subscribeCompleted { () -> Void in
log.error("Completed")
self.tabBarController?.hideHud()
}
请注意,您甚至根本不需要 flattenMap
。由于 take
运算符,信号将简单地完成。