我想从GitHub获得repo名称的文本值。结构体被成功解码,但我似乎无法得到一个对我很重要的值(name)。
请问有人能帮帮忙吗?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()
}
}
apikey
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'。
在最后的项目中,我想使用这个值作为navigationTitle,所以ForEach解决方案从这里:类型[x]的SwiftUI值没有成员[y],但结构体有成员似乎不适合我。
netManager.repos
是Repository
的数组,它没有名称,正如错误告诉您的那样。您必须选择单个repo
并从中获取名称。
例如
Text("(netManager.repos.first?.name ?? "no name")")