这是我的代码段。问题是它没有达到subscribeCompleted块。当我在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
返回的信号仅在“源”信号完成时完成。在您的情况下,请将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 $0.checkSomeConditions()
}.take(1)
.subscribeCompleted { () -> Void in
log.error("Completed")
self.tabBarController?.hideHud()
}
请注意,您甚至根本不需要
flattenMap
。由于take
运算符,该信号将完全完成。
关于ios - ReactiveCocoa订阅了flattenmaped信号的已完成事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937924/