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)
            }

        }
    }
}