Swift UI ожидает загрузки данных из API перед установкойUIIOS

Программируем под IOS
Ответить
Anonymous
 Swift UI ожидает загрузки данных из API перед установкойUI

Сообщение Anonymous »

Я изо всех сил пытаюсь найти работающий ответ, в основном я настроил список навигации, который успешно отображает массив данных типа модели, единственная проблема заключается в том, что при загрузке данных из API контент пытается загрузить для просмотра до того, как данные будут готовы. решение mob ниже, ошибки из-за того, что UIHostingController не запускается в основном потоке?

Код: Выделить всё

func getGenres(_ completion: @escaping (CompetitionGroup?) -> ()) {

let headers = [
"x-rapidapi-key": "api-key***",
"x-rapidapi-host": "football-web-pages1.p.rapidapi.com"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://football-web-pages1.p.rapidapi.com/competitions.json?include=rounds")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse

do {
let decoder = JSONDecoder()
let comps = try decoder.decode(CompetitionGroup.self, from: data!)
self.competitions = comps
completion(self.competitions)
}
catch {
print("Error in JSON")
}
}
})

dataTask.resume()
}
Вызывается в SetupUI():

Код: Выделить всё

private func setupUI() {
self.view.backgroundColor = .systemBackground
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(didTapLogout))

self.view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
])

getGenres { (array) in
// Do operation with array
competitionslist =  array
let childView = UIHostingController(rootView: ContentView()) // ERROR HERE
self.addChild(childView)
childView.view.frame = self.view.bounds
self.view.addSubview(childView.view)
childView.didMove(toParent: self)
}
//competitionslist =  getComps()

}
Пробывал разные вещи из Stack Overflow, которые помогли другим, но безрезультатно, по крайней мере, эта сборка.

Подробнее здесь: https://stackoverflow.com/questions/792 ... re-setupui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»