Swift 在可观察范围内处理一次性垃圾的正确方法

Swift 在可观察范围内处理一次性垃圾的正确方法,swift,rx-swift,Swift,Rx Swift,我有一个HTTPService,它返回一个可观察的。我的目标是将该服务组合成另一个服务,ServiceA,它为我的用例转换数据。使用Observable.create在ServiceA的RxSwift 2.0.0-rc.0中创建,这已经足够简单了。我的问题是如何正确处理订阅HTTPService返回的一次性数据 如果我不做任何事情,就会得到编译时警告,即调用的结果未使用:。我从阅读中了解到,如果我什么都不做,它很可能没问题:(下面提到的xs是让xs:Observable…. 若xs以一种可预测的

我有一个
HTTPService
,它返回一个
可观察的
。我的目标是将该服务组合成另一个服务,
ServiceA
,它为我的用例转换数据。使用
Observable.create
ServiceA的RxSwift 2.0.0-rc.0中创建
,这已经足够简单了。我的问题是如何正确处理订阅
HTTPService
返回的一次性数据

如果我不做任何事情,就会得到编译时警告,即调用的
结果未使用
:。我从阅读中了解到,如果我什么都不做,它很可能没问题:(下面提到的
xs
让xs:Observable….

若xs以一种可预测的方式终止,并显示“已完成”或“错误”消息,则不处理订阅不会泄漏任何资源,但这仍然是首选的方式,因为以这种方式,元素计算会在可预测的时刻终止

下面是我目前如何解决这个问题的,我想知道我是否做得很好,或者我是否误解了什么

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()
            }
        }
    }
}
公共结构服务a{
公共静态函数更改()->可观察{
返回可观察的。在
//可观测收益
let request=HTTPService.get(“https://httpbin.org/get")
让一次性=request.subscribe(
onNext:{数据位于
//做更多的工作来转换这些数据
//转化为对应用程序有意义的内容。
//例如,只需使用空对象即可
observable.onNext(变更集())
可观察的。未完成的()
},
onError:{中有错误
可观测误差(误差)
})
//这是处理问题的正确方法吗
//在这种情况下,是否可以从订阅中删除?
一次性退货{
一次性处置
}
}
}
}
如前所述

subscribe函数返回可用于取消计算和释放资源的订阅。
终止这些流畅调用的首选方法是使用 .addDisposableTo(disposeBag)或以某种等效方式。 当
disposeBag
解除分配时,将自动取消订阅 处置

事实上,您的示例在规则方面看起来不错,但它非常糟糕;)(如果您只返回此
一次性
,也可以:


您完全可以在re:
map
上找到自己的位置。我完全忘了,谢谢你!。至于
disposeBag
,由于它是一个静态函数,我不知道
disposeBag
在该范围内是否合适,但绝对map是一个很好的建议,再次感谢。
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)
                    })
}
public static func changes() -> Observable<ChangeSet> {
    return HTTPService.get("https://httpbin.org/get")
                      .map(ChangeSet.init)
}