Я пытаюсь сохранить данные из вызова JSON в переменную (вызывая это в ViewDidLoad, если это имеет значение).Я застрял на этом довольно долго и очень расстраиваюсь.
Я знаю, что уже есть темы на эту тему, но я не могу понять это, и я надеюсь, что это простообъяснение того, что я делаю неправильно.
Редактирование: выполнение передается в строку "print (" точка останова ")" перед вызовом JSON. Я хочу принудительно заставить выполнение ждать, чтобы я мог на самом деле заполнитьдо хотел карты, но я борюсь с тем, как это сделать.Извините, если это было неясно!
Вот вызов в viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
setPickerView.dataSource = self
setPickerView.delegate = self
testJSONgrab.getCards(url: "https://mtgjson.com/json/WAR.json") {json, error in
DispatchQueue.main.async {
for item in json {
self.wantedCARDSET.append(item)
}
}
}
print("breakpoint")
Функция getCards
class mtgJSONDATA {
func getCards(url: String, completionHandler: @escaping ([CARDS], Error?)-> Void) {
var cardSet = [CARDS]()
guard let url = URL(string:url) else {return}
let session = URLSession.shared
let task = session.dataTask(with: url, completionHandler: {
(data, response, error) in
if error == nil {
guard let data = data else {return}
do {
let decoded = try JSONDecoder().decode(mtgJSON.self, from: data)
DispatchQueue.main.async {
for item in decoded.cards! {
cardSet.append(item)
}
completionHandler(cardSet, nil)
}
} catch let jsonError {
print("Error serializing JSON: ", jsonError)
}
}
})
task.resume()
}