首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI:传递给子视图的数组错误

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

Stack Overflow用户
提问于 2021-08-23 13:12:02
回答 1查看 45关注 0票数 0

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

我的根本观点是:

代码语言:javascript
复制
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

代码语言:javascript
复制
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按钮时,会得到以下输出:

代码语言:javascript
复制
ContentView []
RemindersListView []
ContentView [Common.Reminder(id: 2FC19F91-9B96-40DB-8CCB-4CBB39C62DBD, done: false, text: "")]
RemindersListView []

这意味着ContentView中的状态发生了变化,它重新呈现应用程序,但是RemindersListView接收初始值。

有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-23 13:38:41

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

代码语言:javascript
复制
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])
            }
        }
    }
}

此外,这也是在:

代码语言:javascript
复制
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)
            }

        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68893350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档