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

标签 ios reactive-cocoa frp reactive-cocoa-3

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

例如,您可以使用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运算符,该信号将完全完成。

关于ios - ReactiveCocoa订阅了flattenmaped信号的已完成事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937924/

相关文章:

ios - 有没有办法在 Swift 中自定义 Firebase 电话身份验证发送的短信?

ios - 防止 SwiftUI 系统镜像动态更改导航栏项目的大小

ios - ReactiveCocoa 将 SignalProducers 合二为一

javascript - Bacon.js 仅当 prop === true 时才将属性与 .and() 结合起来

random - 初始化榆树应用程序的正确方法是什么

c++ - lambda 及其捕获的值

ios - 展示广告时 Facebook 受众网络崩溃

ios - Xamarin 中的 HKErrorDomain(HealthKit 错误域)常量

swift - Reactive Cocoa 4 中用于重复网络请求的管道

objective-c - Reactive Cocoa 中 RACAble()、RACObserve() 和 RACBind() 的区别