gpt4 book ai didi

ios - onCompleted 永远不会被调用

转载 作者:搜寻专家 更新时间:2023-11-01 06:37:01 28 4
gpt4 key购买 nike

通过使用 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()
}
})
}

只要模型创建好了,我就把它发给观察者并完成

在 View Controller 中,我正在做

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只有在它们被释放时才完成( source )所以 result 是有道理的没有收到 onCompleted .

这个行为是有道理的。在 onCompleted 之后,Observable 将永远不会发出新值。 .而且您不希望它在第一个搜索结果出现后停止更新。

关于ios - onCompleted 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40363779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com