最好使用结构,例如在你的情况下:
struct Data: Codable { let id: Int let first_name: String let last_name: String let email: String let created: Date let modified: Date }
然后,您将创建该结构的变量,您将在其中存储它:
var dataVariable = [Data]()
然后,您可以执行以下URL调用:
func getData(arr: Bool, completion: @escaping (Bool) -> ()) { let urlJSON = "URL" guard let url = URL(string: urlJSON) else { return } URLSession.shared.dataTask(with: url) { (data, response, err) in guard let data = data else { return } do { let getData = try JSONDecoder().decode([Data].self, from: data) self.dataVariable = getData } catch let jsonErr { print("error serializing json: \(jsonErr)") } completion(arr) }.resume() }
然后,您可以从dataVariable var访问所有这些内容。如果您在Manager类中执行此操作,则可以从任何ViewController访问它。
要访问:
let firstNameString = dataVariable[0].first_name
如果没有相同的多个树,那么只需确保它:
let getData = try JSONDecoder().decode(Data.self, from: data)
编辑:
在你的情况下把上面这里:
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in if let error = error { print("error") } else if let response = response { print("response") } else if let data = data { let getData = try JSONDecoder().decode([Data].self, from: data) self.dataVariable = getData // <- Just decode here print(data) } DispatchQueue.main.async { // Correct guard let responseData = data else { print("Error: did not receive data") return } print(String(data: responseData, encoding: String.Encoding.utf8) ?? "") } }) task.resume()