swift - 如何在swift中的数据更改后更改变量
问题描述
我正在使用 API 来了解 API 的工作原理,并且我编写了一个函数,该函数从 Web 获取数据并将其解析为我的模型,但是当我想从该模型打印任何内容时,它不起作用,除非它在我的函数中。
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,这样做以防万一。不是在调用你的函数之后。
另外,您最好在填充模型类后对其进行零检查。
只是为了展示一个例子:
case .Succeed:
self.movieDetail = model
if self.movieDetail != nil{
print(movieDetail!.backdrop_path)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
break
推荐阅读
- php - 计算位置以给动画 gif 中的正方形提供加速/减速效果?
- django - 从不同的应用程序登录用户到 Django 应用程序
- docker - 如何在主机中镜像 docker 卷
- oracle - oracle分区如何避免全表扫描
- python - “Dash”未访问Pylance / 导入“Dash”无法解决Pylance
- kong - 如何在本地安装 Kong 中安装自定义插件
- php - WooCommerce 短代码 ajaxify 显示的消息:“购买更多产品以获得折扣”
- python - 如何将此 C# do-while 循环转换为 Python while 循环?
- python - 将 excel 选项卡转换为 CSV 文件正在将我的列转换为浮点数。需要改成String
- javascript - React 构建看起来与 React 开发不同