【发布时间】:2021-10-11 18:02:55
【问题描述】:
我正在尝试创建这样的列表视图和详细屏幕:
struct MyListView: View {
@StateObject var viewModel: MyListViewModel = MyListViewModel()
LazyVStack {
// https://www.swiftbysundell.com/articles/bindable-swiftui-list-elements/
ForEach(viewModel.items.identifiableIndicies) { index in
MyListItemView($viewModel.items[index])
}
}
}
class MyListViewModel: ObservableObject {
@Published var items: [Item] = []
...
}
struct MyListItemView: View {
@Binding var item: Item
var body: some View {
NavigationLink(destination: MyListItemDetailView(item: $item), label: {
...
})
}
}
struct MyListItemDetailView: View {
@Binding var item: Item
@StateObject var viewModel: MyListViewItemDetailModel
init(item: Binding<Item>) {
viewModel = MyListViewItemDetailModel(item: item)
}
var body: some View {
...
}
}
class MyListViewItemDetailModel: ObservableObject {
var item: Binding<Item>
...
}
我不确定它有什么问题,但我发现item 变量彼此不同步,即使在 MyListItemDetailView 和 MyListItemDetailViewModel 之间也是如此。
有没有人可以提供最佳实践并让我知道我的实施中有什么问题?
【问题讨论】:
-
每次使用“MyListItemDetailView”时,都会重新创建一个新的MyListViewItemDetailModel。那是你想做的吗?这可能是您问题的根源吗?
-
当我刚刚让它工作时,我没有发现任何问题,但这可能只是为了解决所有问题,甚至让它编译跨度>
-
@workingdog 我认为没问题。因此,当我在
MyListViewItemDetailModel中更新item时,它不适用于MyListView和MyListItemView。 -
@George 你认为没有问题吗?确实,视图之间的值不同步。
-
@Yun 你能比'视图之间不同步'更清楚吗?例如
NavigationLink在目的地显示正确的东西,我可以添加新项目。 Bear in bind 我不得不编辑很多东西才能编译它,所以我可能有不同的运行代码。