将async函数的结果保存到全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将async函数的结果保存到全局变量相关的知识,希望对你有一定的参考价值。

我有一个JSON响应函数。此时我正在使用完成方法,但我想在另一个View中使用JSON数组。如何将这个数组保存为全局变量,或建议另一种方式在第二个视图中使用这个数组。(如果它是真的,我想摆脱这个完成方法并使用大量而不是所有时间都回想起完成的函数,因为接收响应我需要等待大约5秒)。

    func LTE1800(_ completion: @escaping ([[String]]) -> ()) {
    let myURLAdress = "myURL"
    let myURL = URL(string: myURLAdress)

    let task = URLSession.shared.dataTask(with: myURL!) { (data, 
   response, error) in
        guard let dataResponse = data,
            error == nil else {
                print(error?.localizedDescription ?? "Response 
   Error")
                return }
        do{
            let jsonResponse = try 
  JSONSerialization.jsonObject(with:dataResponse, options: []) as! 
   [String:Any]
              guard let jsonArray = jsonResponse["aaData"] as? 
   [[String]] else {
                return
            }
            completion(jsonArray)

        }

        catch let parsingError {
            print("Error", parsingError)
        }

    }
    task.resume()

  }
答案

通常,您不应该在swift中使用可变全局变量。你应该做的是在完成后调用网络请求,根据需要更新UI。围绕视图传递数据的一种常见模式是委托模式。

https://www.raywenderlich.com/477-design-patterns-on-ios-using-swift-part-1-2

以上是关于将async函数的结果保存到全局变量的主要内容,如果未能解决你的问题,请参考以下文章

条码扫描器Phonegap插件;无法将结果保存到全局变量中,或保存到隐藏字段

函数调用自身时全局丢失

来自dispatch_async全局崩溃的C函数调用,但在主队列上工作

async和await用法

async/await 在全局范围内显示数据

将 Async/Await 响应保存在变量上