Итак, я загружаю файл 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 должен быть установлен только из основного потока, но я не знаю другого способа исправить это. Пожалуйста помоги.