繁体   English   中英

ReactiveCocoa订阅了flattenmaped信号的已完成事件

[英]ReactiveCocoa subscribe to completed event of flattenmaped signal

这是我的代码段。 问题是它没有达到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返回的信号RACObserve完成。 根据您要实现的目标,您可以使用一些运算符来转换信号并获得另一个将更早完成的信号。

例如,您可以使用filtertake以便在发送符合某些条件的第一个值后,生成的信号完成:

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操作员。

可以将flattenMap视为将整个信号转换为空信号的连接,直到每个空信号完成(被flattenMapped的信号完成),才会发送完成信号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM