簡體   English   中英

onCompleted永遠不會被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM