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.repos
是 Repository
的数组,它没有名称,正如错误告诉您的那样。您必须 select 一个 repo
并从中获取名称。
例如
Text("\(netManager.repos.first?.name ?? "no name")")
我想从 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.repos
是 Repository
的数组,它没有名称,正如错误告诉您的那样。您必须 select 一个 repo
并从中获取名称。
例如
Text("\(netManager.repos.first?.name ?? "no name")")