JSON 解码结构有一个键,但 Xcode 调用 SwiftUI 中没有具有该键的成员

JSON decoding struct has a key, but Xcode calls that there is no member with that key in SwiftUI

我想从 GitHub 获取存储库名称的文本值。结构已成功解码,但我似乎无法获得对我来说很重要的一个值(名称)。

有人可以帮忙吗?

Swift 个文件,代码为:

解码器

class NetworkingManager: ObservableObject{
    @Published var repos = [Repository]()
    
    init() {
        loadData()
    }
    
    func loadData() {
        guard let url = URL(string: "https://api.github.com/users/jacobtoye/repos") else { return }
        URLSession.shared.dataTask(with: url) {(data, _, _) in
            guard let data = data else { return }
            DispatchQueue.main.async {
                do {
                    self.repos = try JSONDecoder().decode([Repository].self, from: data)
                } catch {
                    fatalError("Failed to decode given URL")
                }
            }
        }.resume()
    }
}

API 密钥

import Foundation

struct Repository: Decodable, Identifiable {
    let id: Int
    let name: String
    let owner: Owner
    
    enum CodingKeys: String, CodingKey {
        case id, owner
        case name
    }
}

struct Owner : Decodable, Identifiable {
    let id: Int
    let reposUrl : String

    enum CodingKeys: String, CodingKey, CaseIterable {
        case id
        case reposUrl = "repos_url"
    }
}

内容视图

import SwiftUI

struct ContentView: View {
    @StateObject var netManager = NetworkingManager()
    
    var body: some View {
        Text("\(netManager.repos.name)")
        }
    }

我得到的错误是:类型 [Repository] ​​的值没有成员 'name'。

在最终项目中,我想将此值用作导航标题,因此此处的 ForEach 解决方案: 对我来说似乎不可行。

netManager.reposRepository 的数组,它没有名称,正如错误告诉您的那样。您必须 select 一个 repo 并从中获取名称。

例如

Text("\(netManager.repos.first?.name ?? "no name")")