我正在使用 API 来了解 API 的工作原理,并且编写了一个函数,该函数从网络获取数据并将其解析到我的模型中,但是当我想从该模型打印任何内容时,它不起作用,除非它在我的函数中。
import UIKit
class MovieDetailViewController: UIViewController {
var selectedMovie : Int?
var movieDetail : MovieDetailModel? = nil
override func viewDidLoad() {
super.viewDidLoad()
getMovioesDetail(url: "\(URLs().baseURL)/movie/\(selectedMovie!)\(URLs().API_key)")
print(movieDetail?.backdrop_path)
// It does not print the path
}
//MARK: - Functions
func getMovioesDetail (url: String) {
WebServices().get(url) { (type, model : MovieDetailModel?) in
switch type {
case .Succeed :
self.movieDetail = model
print(self.movieDetail?.backdrop_path)
// It prints the path
case .Failed : print("Failed")
case .FailedDecode : print("FailedDecode")
default : break
}
}
}
}
最佳答案
正如 @Aaron Cyrman 所说,您的函数包括 Web 服务调用,并且 Web 服务异步运行,这意味着您不知道何时收到响应。
这就是为什么如果你想打印一些东西或者重新加载你的tableview/collectionview,那么就这样做,以防万一。成功;不是在调用您的函数后立即进行的。
此外,您最好在填充模型类后对其进行 nil 检查。
仅举一个例子:
case .Succeed:
self.movieDetail = model
if self.movieDetail != nil{
print(movieDetail!.backdrop_path)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
break
关于swift - 如何在数据更改后快速更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575128/