Warnings
未使用的disposeable(unused-disposable)
下面对于返回 Disposable 的 subscribe*, bind* 和 drive* 家族的函数是有效的。
你将会受到一个警告,因为做了一些下面的这些:
1. let xs: Observable<E> ....
3. xs
4. .filter { ... }
5. .map { ... }
6. .switchLatest()
7. .subscribe(onNext: {
8. ...
9. }, onError: {
10. ...
11. })
返回一个订阅 Disposable 的 subscribe 的函数能被用来取消计算和释放资源。然而,不使用它(并且不 dispose 它)将引起一个错误
终止这些流利调用的更好方法是通过使用 DisposeBag,或通过链式调用 .addDisposableTo(disposeBag) 或通过直接给包增加 disposable。
1. let xs: Observable<E> ....
2. let disposeBag = DisposeBag()
4. xs
5. .filter { ... }
6. .map { ... }
7. .switchLatest()
8. .subscribe(onNext: {
9. ...
10. }, onError: {
11. ...
12. })
13. .addDisposableTo(disposeBag) // <--- note `addDisposableTo`
当 disposeBag 被释放时,在 disposables 中的会被自动释放。
xs在无论是Completed或Error消息可预见的方式终止的情况下,不处理订阅 Disposable 不会造成任何资源的泄露。 然而,即使在这种情况下,使用处置袋仍是处理订阅一次性的优选方式。它确保元素计算总是在可预测的时刻终止,使代码健壮和未来的证明,因为资源将被适当设置,即使实施xs变化。
另一种方式来确保订阅和资源都依赖于某些对象的生命周期是使用takeUntil操作符。
1. let xs: Observable<E> ....
2. let someObject: NSObject ...
4. _ = xs
5. .filter { ... }
6. .map { ... }
7. .switchLatest()
8. .takeUntil(someObject.rx_deallocated) // <-- note the `takeUntil` operator
9. .subscribe(onNext: {
10. ...
11. }, onError: {
12. ...
13. })
如果忽略订阅 Disposable 是所期望的行为,这是如何去除编译器警告。
1. let xs: Observable<E> ....
3. _ = xs // <-- note the underscore
4. .filter { ... }
5. .map { ... }
6. .switchLatest()
7. .subscribe(onNext: {
8. ...
9. }, onError: {
10. ...
11. })
未使用的observable(unused-observable)
你像下面这么做就收到一个警告:
1. let xs: Observable<E> ....
3. xs
4. .filter { ... }
5. .map { ... }
此代码定义过滤并从 xs 序列映射的 observable, 但忽略结果
由于该代码只是定义了一个可观察序列(observable),然后忽略它,它实际上并没有做任何事情。
你的意图可能是要么存储可观察序列(observable)定义并在以后使用它…
1. let xs: Observable<E> ....
3. let ys = xs // <--- names definition as `ys`
4. .filter { ... }
5. .map { ... }
… 或开始基于定义的计算
1. let xs: Observable<E> ....
2. let disposeBag = DisposeBag()
4. xs
5. .filter { ... }
6. .map { ... }
7. .subscribeNext { nextElement in // <-- note the `subscribe*` method
8. // use the element
9. print(nextElement)
10. }
11. .addDisposableTo(disposeBag)
