这是我的代码段。问题是它没有达到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()
}
答案 0 :(得分:2)
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
运算符,信号将完成。
答案 1 :(得分:0)
flattenMap可以看作是将整个信号转换为空信号的连续状态,完成后不会被发送,直到每个空信号完成(信号被flattenMapped完成)