在SwiftUI中使用ForEach获得两个不同的结果
我有一个在SwiftUI中使用ForEach获得两个不同的结果,swiftui,Swiftui,我有一个structs列表,我使用ForEach在视图中显示,我试图添加到列表中,当用户点击时,他们会看到该项目的信息。使用两种方法,我得到两种不同的结果 第一种方法 当项目完全添加时,视图会更新视图,但在详细信息中更改注释会更改所有注释的值 @Binding var person: Person ForEach(self.person.notes) { note in DetailsCard(person: self.$person, note: notes)
structs
列表,我使用ForEach
在视图中显示,我试图添加到列表中,当用户点击时,他们会看到该项目的信息。使用两种方法,我得到两种不同的结果
第一种方法
当项目完全添加时,视图会更新视图,但在详细信息中更改注释
会更改所有注释的值
@Binding var person: Person
ForEach(self.person.notes) {
note in
DetailsCard(person: self.$person, note: notes)
}
第二种方法
添加注释时,视图不会更新,仅当视图重新出现时,才会显示新项目。但是,当显示项目时,详细信息视图按预期工作
@Binding var person: Person
ForEach(self.person.notes.indices) { index in
VStack {
DetailsCard(person: self.$person, note: self.person.notes[index])
}
}
详细视图
@Binding var person: Person
@State var note: Note
这应该是一项相当简单的任务,但使用SwiftUI时,我对类似方法的两种不同结果感到困惑。是否有人知道为什么会发生这种情况,以及如何正确地动态更新视图和传递值。尝试使用动态
ForEach
循环,即使用显式id
参数:
ForEach(self.person.notes, id:\.self)
注意:id
必须符合Hashable
。如果您决定将self
用作id
,则只有当您的项目符合哈希表
时,它才会起作用。否则,您可能需要使用一些属性(或者只是添加一致性)
ForEach(self.person.notes.indices, id:\.self)