swift – 在一个可观察物内处理一次性物品的正确方法

swift – 在一个可观察物内处理一次性物品的正确方法,第1张

概述我有一个HTTPService,它返回一个Observable< NSData>.我的目标是将该服务组合到另一个服务中,ServiceA为我的用例转换该数据.在ServiceA中使用Rx Swift 2.0.0-rc.0中的Observable.create就足够了.我的问题是如何正确处理从HTTPService订阅返回的一次性. 如果我什么都不做,我得到编译时间警告,调用结果未使用:http:/ 我有一个httpService,它返回一个Observable< NSData>.我的目标是将该服务组合到另一个服务中,ServiceA为我的用例转换该数据.在ServiceA中使用Rx Swift 2.0.0-rc.0中的Observable.create就足够了.我的问题是如何正确处理从httpService订阅返回的一次性.

如果我什么都不做,我得到编译时间警告,调用结果未使用:http://git.io/rxs.ud.我从阅读中理解,如果我什么也不做,那可能没问题:(下面提到的xs是让xs:Observable< E&gt ;. ...

In case xs terminates in a predictable way with Completed or Error message,not handling subscription disposable won’t leak any resources,but it’s still preferred way because in that way element computation is terminated at predictable moment.

所以这就是我目前正在解决的问题,也是我想知道我是否正确地做到这一点,或者我是否误解了一些问题.

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()            }        }    }}
解决方法 正如 documentation所说

subscribe function returns a subscription disposable that can be used to cancel computation and free resources.
Preferred way of terminating these fluent calls is by using
.adddisposableto(disposeBag) or in some equivalent way.
When disposeBag gets deallocated,subscription will be automatically
disposed.

实际上你的例子在规则方面看起来很好,但它很糟糕;)(也可以,如果你只是返回这个一次性):

public static func changes() -> Observable<ChangeSet>{        return Observable.create{ observable in            // return's Observable<NSData>            let request = httpService.get("https://httpbin.org/get")            return 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)                    })}

但是当你回到Observeble时,我想知道,为什么你不只是使用地图运算符?

在您的示例中,它将是这样的:

public static func changes() -> Observable<ChangeSet> {    return httpService.get("https://httpbin.org/get")                      .map(ChangeSet.init)}
总结

以上是内存溢出为你收集整理的swift – 在一个可观察物内处理一次性物品的正确方法全部内容,希望文章能够帮你解决swift – 在一个可观察物内处理一次性物品的正确方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存