首页 > 解决方案 > 如何在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
        }
    }
}
}

标签: swiftapiparsingmodel

解决方案


正如@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

推荐阅读