簡體   English   中英

SWIFT可解碼數據傳輸

[英]SWIFT decodable data transfer

我在viewController中有一個usernameTextField ,在其中輸入用戶名和一個searchTapped按鈕,其中包含以下代碼:

@IBAction func searchTapped(_ sender: UIButton) {
        guard let username = usernameTextField.text, username != "" else {
            displayWarningLabel(withText: "Information is incorrect")
            return
        }

        guard let gitUrl = URL(string: "https://api.github.com/users/\(username)/gists") else { return }
        URLSession.shared.dataTask(with: gitUrl) { (data, response, error) in

            guard let data = data else { return }
            guard error == nil else { return }
            do {
                let gitData = try JSONDecoder().decode([Gists].self, from: data)
                DispatchQueue.main.async {
                    self.gists = gitData
                }
            } catch let error {
                print(error)
            }
            }.resume()

        performSegue(withIdentifier: "GistsSegue", sender: nil)
    }

從json獲取數據后,我想將數據保存到此方法之外的數組要點中,但這不會發生。

 var gists = [Gists]()

可能是什么問題呢?

以防萬一,這是我解析json的模型:

struct Gists: Codable {
    var description: String?
    var files: [String: DetailGist]
}

struct DetailGist: Codable {
    var filename: String?
    var raw_url: String?
}

self.gists = gitData正在被調用,但是在您調用performSegue之后很久才被調用。 這就是異步數據訪問的本質。

只需將您的performSegue調用移動到設置self.gists之后self.gists

DispatchQueue.main.async {
    self.gists = gitData
    performSegue(withIdentifier: "GistsSegue", sender: nil)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM