我正在学习使用 SwiftUI 进行 iOS 开发。我使用 NavigationStack 将用户传递给 DetailView:
let shape = RoundedRectangle(cornerRadius: Constants.cornerRadius)
NavigationStack {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: Constants.gridItemSize))]) {
ForEach(userWrappers) { userWrapper in
Section(userWrapper.section) {
ForEach(userWrapper.users, id: \.self.login) { user in
NavigationLink(value: user) {
VStack {
AsyncImage(url: URL(string: user.avatarUrl)) { image in
image
.resizable()
.scaledToFit()
.frame(width: Constants.frameSize, height: Constants.frameSize)
.clipShape(shape)
} placeholder: {
shape.foregroundColor(.secondary)
.frame(width: Constants.frameSize, height: Constants.frameSize)
}
Text(user.login)
.font(.title3)
}.padding()
}
}
}
}
}.navigationDestination(for: GithubUser.self) { user in
DetailView(user: user)
}
.navigationTitle("List")
}
}
}
如你所见,我将用户传递给 DetailView。它显示用户名和头像,但无法在 DetailView 中始终显示个人资料,并且不显示个人资料,如下面的代码所示:
VStack {
AsyncImage(url: URL(string: user.avatarUrl)) { image in
image
.resizable()
.scaledToFit()
} placeholder: {
Rectangle()
.foregroundColor(.secondary)
.frame(width: Constants.frameSize, height: Constants.frameSize)
}.padding()
Text(user.bio ?? "No Bio")
.padding()
Spacer()
}
.navigationTitle(user.login)
这是我的模型类:
struct GithubUser: Codable, Hashable {
let login: String
let avatarUrl: String
let bio: String?
}
您可以在https://github.com/alirezaeiii/Networking-Assignment找到源代码
你能帮助我吗?
正如您在 Safari 或 Postman 中看到的那样,Github
users
API 不包含bio
字段 https://api.github.com/users/alirezaeiii/following根据Github REST API 文档,你可以
bio
通过另一个调用来获取user
数据,从而获取该字段。例如:https://api.github.com/user/69767
因此,您需要为每个用户执行另一个 API 调用,以便在详细信息屏幕中显示它(从列表和详细信息中获取的数据模型不同)。
祝你好运