简介
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)