如何在 RxSwift 中组合多个 Observable

13thang08

假设我为每个图像下载创建了一个 Observable

for _ in 0...N {
    let s : Single<UIImage?> = fetchImage(from url)
}

我怎样才能:

  • 创建一个新的 Observable 以在下载完成时发出事件
  • 创建一个新的 Observable 以在所有下载完成时仅发出完成的事件

谢谢!

克里斯威洛

创建一个新的 Observable 以在下载完成时发出事件

查看imageObservable可能实现的方法

创建一个新的 Observable 以在所有下载完成时仅发出完成的事件

zip文档)运营商可能是你在找什么。

import RxSwift
import UIKit

enum CustomError: Error {
    case someError
}

class Executer {

    let disposeBag = DisposeBag()

    func execute() {
        let imageURLs = [
            URL(string: "http://via.placeholder.com/350x150")!, 
            URL(string: "http://via.placeholder.com/350x150")!
        ]
        let imageObservables = imageURLs.map { self.imageObservable(url: $0) }
        Observable
            .zip(imageObservables) // wait for all image requests to finish
            .subscribe(onNext: { images in
                // here you have every single image in the 'images' array
                images.forEach { print($0) }
            })
            .disposed(by: disposeBag)
     }

     // wrap 'URLSession' datatask into an observable
     func imageObservable(url: URL) -> Observable<UIImage> {
        return Observable.create { observer in
            URLSession
                .shared
                .dataTask(with: url, completionHandler: { (data, response, error) -> Void in
                    if let error = error {
                        observer.onError(error)
                        return
                    }
                    guard let data = data, let image = UIImage(data: data) else {
                        observer.onError(CustomError.someError)
                        return
                    }
                    observer.onNext(image)
                    observer.onCompleted()
                })
                .resume()
            return Disposables.create()
        }
    }
}

这个答案可能也与您有关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在RxSwift中使用flatMap观察较高的Observable?

来自分类Dev

如何测试RxSwift Observable.interval进度

来自分类Dev

如何测试RxSwift Observable.interval进度

来自分类Dev

如何在Angular 2中将多个Observable组合在一起

来自分类Dev

如何在RxSwift中配置Bool流

来自分类Dev

如何在RxSwift中设置延迟?

来自分类Dev

如何组合多个 Observable 类型数组 Observable<T[]>?

来自分类Dev

RxSwift使Observable触发主题

来自分类Dev

Observable<Bool> If else in RxSwift

来自分类Dev

Rxjava:如何在没有完成所有 observable 的情况下组合多个 observable?

来自分类Dev

RxSwift - 如何在 observable 更改但仅发出最后一个值时重试?

来自分类Dev

swift - performSegue 在 RxSwift Observable 中不起作用

来自分类Dev

如何在 RxSwift 中为 Binder 支持 distinctUntilChanged?

来自分类Dev

如何在 RxJava 中同时运行多个 Observable?

来自分类Dev

使用 Observable 绑定 BehaviorRelay - RxSwift

来自分类Dev

如何正确使用 Observable.zip() 组合多个 Retrofit 调用?

来自分类Dev

如何在终端中组合多个命令?

来自分类Dev

如何在Ramda中组合多个异径管?

来自分类Dev

如何在jqueryUI中组合多个可选

来自分类Dev

如何在jQuery中组合多个find()?

来自分类Dev

如何在ms excel中组合多个IF

来自分类Dev

如何在Rx Observable中包装SKPaymentQueue

来自分类Dev

如何在RxJS中完成Observable

来自分类Dev

如何在Android中创建Observable?

来自分类Dev

如何在Promise函数中返回Observable

来自分类Dev

如何在Firestore中从Observable捕获错误?

来自分类Dev

如何在单词组合中组合多个功能集

来自分类Dev

RxSwift中带有Observable的最后两个元素的运算符

来自分类Dev

如何将可观察的循环结果组合到RxSwift中的数组?

Related 相关文章

  1. 1

    如何在RxSwift中使用flatMap观察较高的Observable?

  2. 2

    如何测试RxSwift Observable.interval进度

  3. 3

    如何测试RxSwift Observable.interval进度

  4. 4

    如何在Angular 2中将多个Observable组合在一起

  5. 5

    如何在RxSwift中配置Bool流

  6. 6

    如何在RxSwift中设置延迟?

  7. 7

    如何组合多个 Observable 类型数组 Observable<T[]>?

  8. 8

    RxSwift使Observable触发主题

  9. 9

    Observable<Bool> If else in RxSwift

  10. 10

    Rxjava:如何在没有完成所有 observable 的情况下组合多个 observable?

  11. 11

    RxSwift - 如何在 observable 更改但仅发出最后一个值时重试?

  12. 12

    swift - performSegue 在 RxSwift Observable 中不起作用

  13. 13

    如何在 RxSwift 中为 Binder 支持 distinctUntilChanged?

  14. 14

    如何在 RxJava 中同时运行多个 Observable?

  15. 15

    使用 Observable 绑定 BehaviorRelay - RxSwift

  16. 16

    如何正确使用 Observable.zip() 组合多个 Retrofit 调用?

  17. 17

    如何在终端中组合多个命令?

  18. 18

    如何在Ramda中组合多个异径管?

  19. 19

    如何在jqueryUI中组合多个可选

  20. 20

    如何在jQuery中组合多个find()?

  21. 21

    如何在ms excel中组合多个IF

  22. 22

    如何在Rx Observable中包装SKPaymentQueue

  23. 23

    如何在RxJS中完成Observable

  24. 24

    如何在Android中创建Observable?

  25. 25

    如何在Promise函数中返回Observable

  26. 26

    如何在Firestore中从Observable捕获错误?

  27. 27

    如何在单词组合中组合多个功能集

  28. 28

    RxSwift中带有Observable的最后两个元素的运算符

  29. 29

    如何将可观察的循环结果组合到RxSwift中的数组?

热门标签

归档