# 源码
public static func using<Resource>(
_ resourceFactory: @escaping () throws -> Resource,
observableFactory: @escaping (Resource) throws -> RxSwift.Observable<Self.Element>)
-> RxSwift.Observable<Self.Element>
where Resource : RxSwift.Disposable
using的作用
,官方注释:
构造一个依赖于资源对象的可观察序列,资源对象的生命周期与产生的可观察序列的生命周期绑定
根据方法的结构做简单的解释:
(1)using操作符目的创建一个Observable
(2)using创建的Observable是通过observableFactory闭合函数,而且using创建的Observable序列生命周期依赖于observableFactory创建的函数(就是同一个可观察队列)
(3)resourceFactory闭包函数返回的是RxSwift.Disposable类型的值,通常是在这个闭包函数中订阅另外一个可观察序列并将其Disposable的返回值return,这样才能让这个序列的生命周期依赖于observableFactory创建的生命周期
Demo案例
class NetworkController: UIViewController {
let bag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
//一个无限序列(每隔0.1秒创建一个序列数 )
let infiniteInterval$ = Observable<Int>
.interval(.milliseconds(100), scheduler: MainScheduler.instance)
.do(
onNext: { print("infinite$: \($0)") },
onSubscribe: { print("开始订阅 infinite$")},
onDispose: { print("销毁 infinite$")}
)
//一个有限序列(每隔0.5秒创建一个序列数,共创建三个 )
let limited$ = Observable<Int>
.interval(.milliseconds(200), scheduler: MainScheduler.instance)
.take(2)
.do(
onNext: { print("limited$: \($0)") },
onSubscribe: { print("开始订阅 limited$")},
onDispose: { print("销毁 limited$")}
)
//使用using操作符创建序列
let o: Observable<Int> = Observable.using({ () -> AnyDisposable in
return AnyDisposable(infiniteInterval$.subscribe())
}, observableFactory: { _ in return limited$ }
)
o.subscribe(onNext:{
print("o ===",$0)
}).disposed(by: bag)
}
}
class AnyDisposable: Disposable {
let _dispose: () -> Void
init(_ disposable: Disposable) {
_dispose = disposable.dispose
}
func dispose() {
_dispose()
}
}
/// 打印结果:
/// 开始订阅 infinite$
/// 开始订阅 limited$
/// infinite$: 0
/// infinite$: 1
/// limited$: 0
/// o === 0
/// infinite$: 2
/// infinite$: 3
/// limited$: 1
/// o === 1
/// 销毁 limited$
/// 销毁 infinite$
项目运用典型的案例就是:RxSwift官方Demo中ActivityIndicator
文件的使用
提示:RxSwift的学习最好还是参考官方提供的Demo,写法是最优雅的