我有 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()
}
}
}
}
1 Answer
正如documentation所说
实际上你的例子在规则方面看起来很好,但它很糟糕;)(如果你只是返回这个
disposable
也没关系):但是当你回来
Observeble
我想知道,你为什么不使用map
算子?在您的示例中,它将是这样的: