Yin*_*ing 18 ios swift rx-swift
我有一个观察,我只想开始一次.文档说:
使用配置袋或takeUntil操作员是确保清理资源的有效方法.我们建议在生产中使用它们,即使序列将在有限时间内终止.
我的观察结果在一次事件后终止
let observable = Observable.create() { observer in
webservice.makeHTTPRequestWithCompletionBlock {
if something {
observer.on(.Next(...))
observer.onCompleted()
} else {
observer.on(.Error(...))
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设我对取消此观察者的订阅者不感兴趣,我只想让它运行一次并完成.我希望这个observable的生命周期在工作本身完成时结束.这意味着我无法看到disposeBag的好候选人.takeUntil也期待一个'事件',而且我看不到好的事件.
现在我只是通过丢弃一次性来解决警告:
_ = observeable.subscribeNext { ... }
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,或者我应该使用不同的范例?
tom*_*ahh 28
两者DiposeBag并takeUntil用来取消订阅之前接收到.Completed/.Error的事件.
当Observable完成后,用来管理订阅的所有资源配置的自动.
从RxSwift 2.2开始,您可以看到此行为的实现示例 AnonymousObservable.swift
func on(event: Event<E>) {
switch event {
case .Next:
if _isStopped == 1 {
return
}
forwardOn(event)
case .Error, .Completed:
if AtomicCompareAndSwap(0, 1, &_isStopped) {
forwardOn(event)
dispose()
}
}
}
Run Code Online (Sandbox Code Playgroud)
在转发事件后,查看AnonymousObservableSink在接收事件.Error或.Completed事件时呼叫如何处置自身.
总之,对于这个用例,_ =是要走的路.
| 归档时间: |
|
| 查看次数: |
8258 次 |
| 最近记录: |