Swift: установка текста метки в URLSessionTask - PullRequest
0 голосов
/ 02 мая 2018

Итак, я загружаю файл JSON с помощью URLRequest (). Я анализирую его, чтобы получить определенную строку, и я хочу установить текст метки, который есть в моем ViewController, на эту конкретную строку. Я использую CompletionHandler для получения функции, которая получает файл JSON из другого файла Swift.

Вот код вызова функции и установки метки:

class SecondViewController: UIViewController {
    tr = TransportServices()
    tr.getLyftData(origin: originstring, destination: destinationstring){ json in
     //Parsing JSON in order to get specific data
        self.lyftlabel.text = stringexample
    }
}

и вот код получения JSON

func getLyftData(origin: String, destination: String, completionHandler: @escaping ([String: Any]) -> ()){


    let urlrequest = URLRequest(url: URL(string: urlstring)!)


    let config = URLSessionConfiguration.default
    let sessions = URLSession(configuration: config)

    let task = sessions.dataTask(with: urlrequest) {(data, response, error) in
        guard error == nil else {
            print(error!)
            return
        }
        guard let responseData = data else {
            print("error, did not receive data")
            return
        }
        do {
            if let json = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any]{
                completionHandler(json)
            }
        }
        catch {
            print("Error with URL Request")
        }
    }
    task.resume()
}

Это делает работу, но очень медленно. Я знаю, что существует проблема во время выполнения, потому что UILabel.text должен быть установлен только из основного потока, но я не знаю другого способа исправить это. Пожалуйста помоги.

1 Ответ

0 голосов
/ 02 мая 2018

Если вы хотите установить текст метки в основном потоке, используйте это:

DispatchQueue.main.async {

self.lyftlabel.text = stringexample

}
...