【发布时间】:2022-01-23 22:32:26
【问题描述】:
我遇到了这个问题,我不确定我做错了什么,什么都没有显示。我很肯定我这样做是正确的(我想我不是),但我无法弄清楚我做错了什么。我是 Swift 的新手,所以我还在学习,这就是为什么我从这种方法中采用它,因为我想以最简单的方式做到这一点。所以我的问题是,我做错了什么?
SwiftUI 代码:
//
// ContentView.swift
// APIExample
import SwiftUI
struct Response: Codable {
var articles: [Article]
}
struct Article: Codable, Identifiable {
var id = UUID()
var author: String
var title: String
}
struct ContentView: View {
@State private var articles = [Article]()
func loadData() async {
guard let url = URL(string: "https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=APIKEY") else {
print("Invalid URL")
return
}
do {
let (data, _) = try await URLSession.shared.data(from: url)
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
articles = decodedResponse.articles
}
} catch {
print("Invalid data")
}
}
var body: some View {
List(articles, id: \.id) { item in
VStack(alignment: .leading) {
Text(item.author)
.font(.headline)
Text(item.title)
}
}.task {
await loadData()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
【问题讨论】:
-
首先,您忽略了错误。而不是
try? JSONDecoder()...使用try JSONDecoder()...并打印错误:print("Invalid data: \(error)")。