SwiftUI:错误的数组传递给子视图
SwiftUI: wrong array passed to sub view
我正在学习 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)
}
}
}
}
我正在学习 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)
}
}
}
}