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