我试图将数据从JSON调用保存到变量中(如果有区别,请在ViewDidLoad中调用它)。我已经坚持了很长时间,对此感到非常沮丧。
我知道已经有关于此的主题,但是我似乎无法弄清楚,我希望对我做错的事情有一个简单的解释。
编辑:在执行JSON调用之前,执行将转到“ print(“ breakpoint”)“行,我想强制执行等待,这样我才能真正填满通缉的ARDSCARDSET,但正在努力做到这一点。很抱歉,如果不清楚!
这是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()
}
答案 0 :(得分:0)
您错过了重新加载
https://www.googleapis.com/auth/documents
由于获取数据的调用是异步的