[英]onCompleted never gets called
通過使用RxSwift,我的項目的目的是當用戶在搜索欄中鍵入一個城市時,它將調用包裝當前溫度。 目前,我有viewModel
包含
var searchingTerm = Variable<String>("") // this will be binded to search text from view controller
var result: Observable<Weather>! // this Observable will emit the result based on searchingTerm above.
在api服務中,我正在使用RxSwift進行網絡調用
func openWeatherMapBy(city: String) -> Observable<Weather> {
let url = NSURL(string: resourceURL.forecast.path.stringByReplacingOccurrencesOfString("EnterYourCity", withString: city))
return Observable<WeatherModel>.create({ observer -> Disposable in
let downloadTask = self.session.dataTaskWithURL(url!, completionHandler: { (data, response, error) in
if let err = error {
observer.onError(err)
}
else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [String: AnyObject]
let weather = Weather(data: json)
observer.onNext(weather)
observer.onCompleted()
}
catch {
}
}
})
downloadTask.resume()
return AnonymousDisposable {
downloadTask.cancel()
}
})
}
只要模型創建,我就會將它發送給觀察者並完成
在視圖控制器,我正在做
viewModel.result
.subscribe( onNext: { [weak self] model in
self?.weatherModel = model
dispatch_async(dispatch_get_main_queue(), {
self?.cityLabel.text = model.cityName
self?.temperatureLabel.text = model.cityTemp?.description
})
},
onError: { (error) in
print("Error is \(error)")
},
onCompleted:{
print("Complete")
}
)
{ print("Dealloc")}
.addDisposableTo(disposeBag)
}
它按預期工作,UI更新並顯示我想要的。 但是,我剛剛意識到onCompleted
永遠不會被調用。 我假設如果我做的一切正確,我必須打印出來。
關於這個問題的任何想法。 歡迎所有評論。
result
似乎來自searchingTerm
,它是一個Variable
。
Variable
僅在被釋放( 源 )時才完成, result
不會接收onCompleted
是有意義的。
行為就是這個是有意義的。 onCompleted
后,一個observable永遠不會發出新的值。 並且您不希望它在顯示第一個搜索結果后停止更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.