从 URL 加载 Codable 数据
Loading Codable data from URL
我正在构建一个应用程序来获取和显示来自 https://www.hackingwithswift.com/samples/friendface.json 的数据。
我创建了以下结构:
struct Response: Codable {
var results: [User]
}
struct User: Codable {
struct Friend: Codable {
var id: String
var name: String
}
var id: String
var isActive: Bool
var name: String
var age: Int
var company: String
var email: String
var address: String
var about: String
var regiestered: Date
var tags: [String]
var friends: [Friend]
}
let urlString = "https://www.hackingwithswift.com/samples/friendface.json"
然后我尝试使用这样的函数加载数据:
func loadData () {
guard let url = URL(string: urlString) else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
DispatchQueue.main.async {
self.results = decodedResponse.results
}
return
}
}
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
}.resume()
}
但是当 运行 应用程序时,我得到“未知错误”输出。我做错了什么?
您的代码中存在一些问题。
首先,您的用户 属性 中有错字。它应该注册而不是注册。
其次,您正在尝试解码 Response 而不是一组用户。
第三,您没有将 dateDecodingStrategy 设置为 iso8601。
第四,你忽略了错误。不用试试?捕获错误并检查您的解码器抛出的内容。
struct User: Codable {
let id: String
let isActive: Bool
let name: String
let age: Int
let company: String
let email: String
let address: String
let about: String
let registered: Date
let tags: [String]
let friends: [Friend]
}
struct Friend: Codable {
let id: String
let name: String
}
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let users = try decoder.decode([User].self, from: data)
// your code
} catch {
print("Decode error:", error)
return
}
我正在构建一个应用程序来获取和显示来自 https://www.hackingwithswift.com/samples/friendface.json 的数据。
我创建了以下结构:
struct Response: Codable {
var results: [User]
}
struct User: Codable {
struct Friend: Codable {
var id: String
var name: String
}
var id: String
var isActive: Bool
var name: String
var age: Int
var company: String
var email: String
var address: String
var about: String
var regiestered: Date
var tags: [String]
var friends: [Friend]
}
let urlString = "https://www.hackingwithswift.com/samples/friendface.json"
然后我尝试使用这样的函数加载数据:
func loadData () {
guard let url = URL(string: urlString) else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
DispatchQueue.main.async {
self.results = decodedResponse.results
}
return
}
}
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
}.resume()
}
但是当 运行 应用程序时,我得到“未知错误”输出。我做错了什么?
您的代码中存在一些问题。 首先,您的用户 属性 中有错字。它应该注册而不是注册。 其次,您正在尝试解码 Response 而不是一组用户。 第三,您没有将 dateDecodingStrategy 设置为 iso8601。 第四,你忽略了错误。不用试试?捕获错误并检查您的解码器抛出的内容。
struct User: Codable {
let id: String
let isActive: Bool
let name: String
let age: Int
let company: String
let email: String
let address: String
let about: String
let registered: Date
let tags: [String]
let friends: [Friend]
}
struct Friend: Codable {
let id: String
let name: String
}
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let users = try decoder.decode([User].self, from: data)
// your code
} catch {
print("Decode error:", error)
return
}