这是我当前拥有的SWIFT代码:

import SwiftUI

struct Holidays: Decodable {
    var date: String
    var localName: String
    var name: String
    var countryCode: String
}

struct HolidaysView: View {
    @State private var holidays = [Holidays]()
    
    var body: some View {
        NavigationView {
            List(holidays, id: \.name) { t in
                VStack(alignment: .leading) {
                    Text(t.date)
                        .font(.headline)
                        .foregroundColor(.cyan)
                    Text(t.name)
                        .font(.body)
                        .foregroundColor(.indigo)
                    Text(t.countryCode)
                        .font(.body)
                        .foregroundColor(.red)
                }
            }
            .navigationTitle("Holidays List")
            .task {
                await fetchHolidaysData()
            }
        }
    }
    
    func fetchHolidaysData() async {
        // create the URL
        guard let url = URL(string: "https://date.nager.at/api/v2/publicholidays/2020/US") else {
            print("THIS URL DOES NOT WORK!")
            return
        }
        
        // fetch the data
        do {
            let (data, _) = try await URLSession.shared.data(from: url)
            
            // decode that data
            if let decodedResponse = try? JSONDecoder().decode([Holidays].self, from: data) {
                holidays = decodedResponse
            }
        } catch {
            print("This data is not valid")
        }
    }
}

struct HolidaysView_Previews: PreviewProvider {
    static var previews: some View {
        HolidaysView()
    }
}

此代码的目标是能够使用URL查看json数据. 当我单击假日列表的导航标题时,没有显示任何数据(在contentview中). 我try 过其他API链接,例如Python的API占位符,它们很有效.我无法弄清楚问题或区别.我也try 过人工智能.我不知道我做错了什么,我是否必须使用API的所有数据变量?或者可能是ID?我使用的其他api都有每个数据部分的id,所以我把

List(holidays, id: \.name) { t in      ```
as 
List(todos, id: \.id) { t in      ```
```, could this be a possible reason?
                       

推荐答案

这是我的工作示例代码,它汇集了 comments 的建议.该代码可让您实现目标,如所述The goal of this code is to be able to view the json data using the URL

struct Holidays: Identifiable, Decodable { // <-- here
    let id = UUID() // <-- here
    
    var date: String
    var localName: String
    var name: String
    var countryCode: String

    enum CodingKeys: String, CodingKey {
        case date, localName, name, countryCode  // <-- here no id
    }
}

// for testing
struct ContentView: View {
    var body: some View {
        HolidaysView()
    }
}

struct HolidaysView: View {
    @State private var holidays = [Holidays]()
    
    var body: some View {
        NavigationStack {  // <-- here
            List(holidays) { t in   // <-- here
                VStack(alignment: .leading) {
                    Text(t.date)
                        .font(.headline)
                        .foregroundColor(.cyan)
                    Text(t.name)
                        .font(.body)
                        .foregroundColor(.indigo)
                    Text(t.countryCode)
                        .font(.body)
                        .foregroundColor(.red)
                }
            }
            .navigationTitle("Holidays List")
            .task {
                await fetchHolidaysData()
            }
        }
    }
    
    func fetchHolidaysData() async {
        // create the URL
        guard let url = URL(string: "https://date.nager.at/api/v2/publicholidays/2020/US") else {
            print("THIS URL DOES NOT WORK!")
            return
        }
        // fetch the data
        do {
            let (data, _) = try await URLSession.shared.data(from: url)
            // decode that data
            holidays = try JSONDecoder().decode([Holidays].self, from: data) // <-- here
        } catch {
            print("error: \(error)") // <-- here, important
        }
    }
}

Swift相关问答推荐

解析SON数据的API调用有什么问题?

@ MainActor + Combine不一致的编译器错误

SwiftUI—如何识别单词并获取视觉中的位置

与视图交互使工具栏&;标题消失

相互取消任务

物理主体未与 spritekit Swift 的网格图案上的纹理图像对齐

如何在visionOS中将模型锚定在用户头部上方?

If 语句在 Swift 中有 2 个日期

如何在 swiftui 中设置给定字符串类型日期的日期倒计时?

如何将视图添加到多行文本视图的末尾?

如何为等待函数调用添加超时

使用泛型的 Swift 枚举值

如何在 SwiftUI 中将图像传递到 2 个视图

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

macOS 守护进程应该由Command Line ToolXcode 模板制作吗?

在 iOS 中使用 Swift 保存 PDF 文件并显示它们

Swift if 语句 - 多个条件用逗号分隔?

使用 Swift 以编程方式自定义 UITableViewCell

迭代 Firebase 中的子快照

swift中相同的数据类型多变量声明