RXSwift Zip оператор N элементов через перечислимое

Я использую оператор RxSwift zip для объединения Observable элементов. Я хочу объединить более 8 (максимум поддерживается в настоящее время). Есть ли в RxSwift оператор zip, аналогичный RxJava? - Документация по оператору RxJava Zip


person AJ9    schedule 04.08.2016    source источник
comment
Итак, ответ ниже удовлетворил ваш вопрос? Я не уверен, почему вы не приняли его.   -  person solidcell    schedule 14.08.2016


Ответы (1)


Он может обрабатывать более 8, если вы используете его на CollectionType.

Вот определение метода:

extension CollectionType where Generator.Element : ObservableType {
    public func zip<R>(resultSelector: [Generator.Element.E] throws -> R) -> Observable<R> {
        return ZipCollectionType(sources: self, resultSelector: resultSelector)
    }
}

Поэтому вместо того, чтобы использовать его следующим образом:

Observable.zip(o1, o2, o3, o4, o5, o6, o7, o8, o9) { ... }

Используйте это так:

[o1, o2, o3, o4, o5, o6, o7, o8, o9].zip { ... }
person solidcell    schedule 04.08.2016
comment
Интересно, а есть ли побочные эффекты? - person Graham Smith; 04.08.2016
comment
Никаких побочных эффектов. Он ведет себя как Observable.zip. - person solidcell; 04.08.2016
comment
Если я правильно понимаю, он обрабатывает коллекцию как набор исходных наблюдаемых, а затем заархивирует их по мере их испускания? Это правильно? - person Graham Smith; 04.08.2016
comment
Этот ответ не компилируется с Swift 3.1 и RxSwift 3.4.1. не могли бы вы обновить его? - person matt.writes.code; 15.06.2017
comment
Вышеприведенное больше не компилируется с Xcode 12. Кто-нибудь еще сталкивался с этой проблемой? - person klmitchell2; 14.10.2020