【发布时间】:2020-04-07 06:37:11
【问题描述】:
我有一个列表,其中包含推送视图的行。该视图有另一个列表,它推动另一个视图。原始 List 和第一个推送的 List 会随着数据的变化而更新。但是,最后一个视图在推送时不会更新。当我向后滑动时,视图不再更新,即使它曾经更新过。
HomeView > UserView > ItemView
User 和 Item 是可识别的结构。我尝试将它们设为 Hashable 并使用 id: \.self,但这似乎也不起作用。
class App: ObservableObject {
@Published var users = [User]()
}
struct HomeView {
@EnvironmentObject var app: App
var body {
List {
Section {
ForEach(app.users) { user in
NavigationLink(destination: UserView(user: user)) {
Text(user.name)
}
}
}
}
}
}
// Updates fine when `app.users` updates
// Stops updating after going back from ItemView
struct UserView {
let user: User
var body {
List {
Section {
ForEach(user.items) { item in
NavigationLink(destination: ItemView(user: user, item: item)) {
Text(item.name)
}
}
}
}
}
}
/// Does not update when app.users updates
struct ItemView {
let user: User
let item: Item
var body {
List {
Section {
ForEach(item.details) { detail in
Text(detail)
}
}
}
}
}
【问题讨论】:
-
User和Item的类型以及如何/在哪里更新它们? -
@Asperi 它们都是结构体,但 Item 嵌套在 User 中。这可能是因为视图没有从初始化的属性更新,但可能需要绑定。这使它看起来更复杂。我想知道是否还有其他我可以做的事情。
-
您肯定需要绑定,因为您只是将模型值的副本传递到子视图中,因此内部的任何修改都保留在内部。
标签: swiftui swiftui-navigationlink