【发布时间】:2015-12-31 15:04:11
【问题描述】:
我有一个HTTPService,它返回一个Observable<NSData>。我的目标是将该服务组合成另一个服务ServiceA,它会为我的用例转换数据。在ServiceA 中的 RxSwift 2.0.0-rc.0 中使用 Observable.create 就足够了。我的问题是如何正确处理订阅HTTPService返回的一次性用品。
如果我什么都不做,我会收到 result of call is unused: http://git.io/rxs.ud 的编译时警告。我从阅读中了解到,如果我什么都不做可能没问题:(下面提到的xs 是let xs: Observable<E> ....
如果 xs 以可预测的方式终止并显示 Completed 或 Error 消息,不处理订阅 Disposable 不会泄漏任何资源,但它仍然是首选方式,因为这样元素计算会在可预测的时刻终止。
以下是我目前的处理方式,以及我想知道我是否正确执行此操作或是否误解了某些内容。
public struct ServiceA{
public static func changes() -> Observable<ChangeSet>{
return Observable.create{ observable in
// return's Observable<NSData>
let request = HTTPService.get("https://httpbin.org/get")
let disposable = request.subscribe(
onNext: { data in
// Do more work to transform this data
// into something meaningful for the application.
// For example purposes just use an empty object
observable.onNext(ChangeSet())
observable.onCompleted()
},
onError:{ error in
observable.onError(error)
})
// Is this the right way to deal with the
// disposable from the subscription in this situation?
return AnonymousDisposable{
disposable.dispose()
}
}
}
}
【问题讨论】: