Сохранить результат из асинхронной функции в глобальную переменную - PullRequest
0 голосов
/ 05 января 2019

У меня есть функция с ответом JSON. В данный момент я использую метод завершения, но я хочу использовать массив 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()

  }

1 Ответ

0 голосов
/ 05 января 2019

Как правило, вы не должны использовать изменяемые глобальные переменные в swift. То, что должен делать, - это вызывать сетевой запрос, а по завершении обновлять пользовательский интерфейс по мере необходимости. Одним из распространенных шаблонов для передачи данных вокруг представлений является шаблон делегата.

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

...