我目前正在一个项目中,该项目需要重构引入RxSwift
的{{1}}依赖项。
我对PromiseKit
或RxSwift
并不是很熟悉,所以如果这很明显,请原谅我。
我正在寻找一种仍可处理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个原始可观察对象和您的操作的结果。
答案 0 :(得分:1)
首先,您的代码片段包括Apple的Swift zip
,它与反应式编程也不是RxSwift
无关。
https://developer.apple.com/documentation/swift/1541125-zip
在您的情况下,它只是成对地结合了两个数组tabs
和navControllers
。
您对反应式Zip
运算符的理解有点简化了压缩具有多个发射值的流的更为复杂的情况。
如有疑问,请始终检查大理石图:
http://reactivex.io/documentation/operators/zip.html
因此,您最初的直观理解会与更多CombineLatest
相匹配
http://reactivex.io/documentation/operators/combinelatest.html
对于最初的问题,无论所包含的代码是什么-假设您使用Zip
或CombineLatest
两个具有一个发射值的流的超级简化方案,您都可以在PromiseKit
中获得类似的结果when(resolved: guarantees).done {