SwiftUI:传递给子视图的数组错误



我正在学习SwiftUI,我正在尝试构建一个简单的待办事项应用程序。

我的根视图如下:

struct ContentView: View {
@State var reminders: [Reminder] = []

var body: some View {
print("ContentView", reminders)
return VStack {
RemindersListView(
reminders: reminders
)
Button("Add") {
reminders.append(.empty)
}
}
}
}

RemindersListView

struct RemindersListView: View {
@State var reminders: [Reminder]

var body: some View {
print("RemindersListView", reminders)
return List {
ForEach(reminders.indices) { index in
ReminderView(reminder: $reminders[index])
}
}
}
}

当我点击Add按钮,我得到以下输出:

ContentView []
RemindersListView []
ContentView [Common.Reminder(id: 2FC19F91-9B96-40DB-8CCB-4CBB39C62DBD, done: false, text: "")]
RemindersListView []

意味着ContentView的状态改变了,它重新渲染应用程序,但RemindersListView接收到初始值。

任何想法?由于

您正在用空数组初始化RemindersListView!那么你是在修改它而不更新它!你应该绑定你的数据来解决@Binding的问题,这是最简单的方法,但不是唯一的方法来绑定数据,有更多的方法来绑定数据。

struct RemindersListView: View {
@Binding var reminders: [Reminder] // <<: Here!

var body: some View {
print("RemindersListView", reminders)
return List {
ForEach(reminders.indices) { index in
ReminderView(reminder: $reminders[index])
}
}
}
}

struct ContentView: View {
@State var reminders: [Reminder] = []

var body: some View {
print("ContentView", reminders)
return VStack {
RemindersListView(reminders: $reminders) // <<: Here! with $
Button("Add") {
reminders.append(.empty)
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新