将结果从异步函数保存到全局变量

时间:2019-01-04 23:09:08

标签: arrays swift function

我有一个带有JSON响应的函数。目前,我正在使用完成方法,但是我想在另一个视图中使用JSON数组。如何将这个数组保存为全局变量,或者建议另一种在第二个View中使用该数组的方法。(如果它是真实的,我想摆脱这种完成方法,只使用大量而不总是调用带有完成功能的函数,因为接收回复,我需要等待约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()

  }

1 个答案:

答案 0 :(得分:0)

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

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