努力在JSON调用后保存数据

时间:2019-05-01 23:17:11

标签: json swift closures completionhandler

我试图将数据从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()
    }

1 个答案:

答案 0 :(得分:0)

您错过了重新加载

https://www.googleapis.com/auth/documents

由于获取数据的调用是异步的