RxSwift笔记八线程

240 阅读1分钟

简介

    git地址: https://github.com/ReactiveX/RxSwift
    参考资料:http://t.swift.gg/d/2-rxswift
    
    ReactiveX是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华,RxSwift 是 ReactiveX 编程思想的一种实现。

切换线程

sequence1
  .observeOn(backgroundScheduler) // 切换到后台线程
  .map { n in
      print("在 background scheduler 执行")
  }
  .observeOn(MainScheduler.instance) // 切换到主线程
  .map { n in
      print("在 main scheduler")
  }

在线程这部分主要有两个操作符:observeOn 和 subscribeOn ,常用的还是 observeOn 。

  • observeOn 指定接下来的操作在哪个线程。
  • subscribeOn 决定订阅者的操作执行在哪个线程。

封装

import RxSwift

public enum JLScheduler {
    case Main
    case Serial(DispatchQueueSchedulerQOS)
    case Concurrent(DispatchQueueSchedulerQOS)
    case Operation(NSOperationQueue)
    
    
    public func scheduler() -> ImmediateSchedulerType {
        switch self {
        case .Main:
            return MainScheduler.instance
        case .Serial(let QOS):
            return SerialDispatchQueueScheduler(globalConcurrentQueueQOS: QOS)
        case .Concurrent(let QOS):
            return ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: QOS)
        case .Operation(let queue):
            return OperationQueueScheduler(operationQueue: queue)
        }
    }
}

extension ObservableType {
    
    @warn_unused_result(message="http://git.io/rxs.uo")
    public func observeOn(scheduler: TScheduler) -> RxSwift.Observable<Self.E> {
        return observeOn(scheduler.scheduler())
    }
    
}

调用:
NSURLSession.sharedSession()
    .rx_data(request)
    .map { UIImage(data: $0) }
    .observeOn(.Main) // 切换到主线程
    .bindTo(imageView.rx_image) // 在主线程设置 `image`
    .addDisposableTo(disposeBag)