本文介绍了RxSwift:在Alamofire返回数据之前激活onDisposed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用rxSwift和Alamofire从REST(swift 2.3)中获取JSON数据。这是我的代码:
I'm trying to get the JSON data from REST (swift 2.3) with rxSwift and Alamofire. This is my code:
func getArticles(articlesReq: ArticlesReq) - > Observable < [Article] > {
return Observable < [Article] > .create {
observer in
let request = Alamofire.request(.POST, apiPath, parameters: DataHelper().convertStringToDictionary(JSONString), encoding: .JSON)
.responseArray {
(response: Response < [Article], NSError > ) in
if let articlesArray = response.result.value {
observer.on(.Next(articlesArray))
}
observer.on(.Completed)
}
return AnonymousDisposable {
request.cancel()
}
}
}
getArticles(articlesReq).observeOn(MainScheduler.instance)
.subscribe(
onNext: {
data in
print(data)
},
onError: {
error in
print(error)
},
onCompleted: {
print("Completed")
},
onDisposed: {
print("Disposed")
}
).addDisposableTo(db)
onAlposedfire.request返回数据之前的onDisposed返回数据(onNext,onError,onCompleted不返回数据) 。如何等待回应?
onDisposed return data before Alamofire.request return data (onNext, onError, onCompleted not return data ). How to wait for a response?
推荐答案
尝试像这样强烈引用 disposbag
:
let disposeBag = DisposeBag()
func setupRx() {
getArticles(articlesReq).observeOn(MainScheduler.instance)
.subscribe(onNext: {
print("onNext")
// ... use $0 parameter
}, onError: {
print("onError")
// ... use $0 parameter
}, onCompleted: {
print("onCompelete")
}, onDisposed: nil)
.addDisposableTo(disposeBag)
}
您的 disposeBag
应该比响应寿命更长。
Your disposeBag
should live longer than response.
希望这会有所帮助。
这篇关于RxSwift:在Alamofire返回数据之前激活onDisposed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!