PromiseKit是否有RxSwift Zip替代品?

时间:2019-03-20 08:33:11

标签: ios swift rx-swift promisekit

我目前正在一个项目中,该项目需要重构引入RxSwift的{​​{1}}依赖项。

我对PromiseKitRxSwift并不是很熟悉,所以如果这很明显,请原谅我。

我正在寻找一种仍可处理Zip用例的方法

PromiseKit

据我了解,override func start() -> Observable<CoordinationResult> { let tabBarController = UITabBarController() let tabs: [SectionTab] = [.feed] let coordinationResults = Observable.from(configure(tabBarController: tabBarController, withTabs: tabs)).merge() window.rootViewController = tabBarController window.makeKeyAndVisible() return coordinationResults .take(1) } private func configure(tabBarController: UITabBarController, withTabs tabs: [SectionTab]) -> [Observable<Void>] { let navControllers = tabs .map { tab -> UINavigationController in let navController = BaseNavigationController() navController.tabBarItem = UITabBarItem(title: tab.title, image: nil, selectedImage: nil) return navController } tabBarController.viewControllers = navControllers tabBarController.view.backgroundColor = UIColor.white // Fix dark shadow in nav bar on segue return zip(tabs, navControllers) .map { (tab, navController) in switch tab { case .feed: let coordinator = FeedCoordinator(navigationController: navController, dependencies: dependencies) return coordinate(to: coordinator) } } } 组合了2个可观察对象,并允许您对它们进行操作,发出一个可观察对象,这基本上是2个原始可观察对象和您的操作的结果。

1 个答案:

答案 0 :(得分:1)

首先,您的代码片段包括Apple的Swift zip,它与反应式编程也不是RxSwift无关。
https://developer.apple.com/documentation/swift/1541125-zip

在您的情况下,它只是成对地结合了两个数组tabsnavControllers

您对反应式Zip运算符的理解有点简化了压缩具有多个发射值的流的更为复杂的情况。
如有疑问,请始终检查大理石图: http://reactivex.io/documentation/operators/zip.html

因此,您最初的直观理解会与更多CombineLatest相匹配 http://reactivex.io/documentation/operators/combinelatest.html

对于最初的问题,无论所包含的代码是什么-假设您使用ZipCombineLatest两个具有一个发射值的流的超级简化方案,您都可以在PromiseKit中获得类似的结果when(resolved: guarantees).done {