swift - 如何在数据更改后快速更改变量

标签 swift api parsing model

我正在使用 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/

相关文章:

ios - CNContactStore 上的电话号码谓词

iOS 13.0 UIMenu 和 UIContextMenuConfiguration 的 UIAction

java.text.ParseException : Unparseable number: "ä¢è»ÅÒËÅèÍ"

iphone - 我在哪里可以找到用于 Objective-C 的 CSV 到 NSArray 解析器?

javascript - 全局变量在下面的 javascript 函数中未定义

swift - Scenekit - 未检测到碰撞

ios - 滚动并按搜索栏上的取消时应用程序崩溃

jquery - 通过 JQuery 的 Socrata/SODA API 调用不返回整个数据集

python - 如何在 Python 中 append 分页响应的数据集?

php - 如何防止 Laravel 安全漏洞(未通过身份验证时 API 返回未找到)