Есть ли у PromiseKit альтернатива RxSwift Zip? - PullRequest
0 голосов
/ 20 марта 2019

В настоящее время я работаю над проектом, требующим рефакторинга RxSwift зависимостей для введения PromiseKit.

Я не очень знаком с RxSwift или PromiseKit, поэтому, пожалуйста, прости меня, если это очевидно.

Я ищу способ обработки сценария использования Zip до сих пор

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)
            }
    }
}

Из того, что я понимаю, Zip объединяет 2 наблюдаемые и позволяет вам воздействовать на них, испуская одну наблюдаемую, которая, по сути, является результатом двух исходных наблюдаемых и вашего действия.

1 Ответ

1 голос
/ 20 марта 2019

Прежде всего, ваш фрагмент кода включает в себя 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 {

...