swiftUI笔记之Identifiable

在 SwiftUI 中,如果你要使用列表(List)或者集合视图(CollectionView),你需要使用 Identifiable 协议来确保每个元素都具有唯一的标识符。如果你的数据类型本身已经有了唯一标识符(比如一个唯一的 ID 字段),那么可以通过让该数据类型遵循 Identifiable 协议并实现 id 属性来实现。

1
2
3
4
struct Person: Identifiable {
let id: String
let name: String
}

然后,在你的列表或者集合视图中,你可以像这样使用它:

1
2
3
4
5
6
7
8
9
10
11
12
13
struct ContentView: View {
let people = [
Person(id: "1", name: "Alice"),
Person(id: "2", name: "Bob"),
Person(id: "3", name: "Charlie"),
]

var body: some View {
List(people) { person in
Text(person.name)
}
}
}

这里的 List 会自动使用 id 属性来确定每个元素的唯一性,所以你不需要手动指定标识符。
如果你的数据类型没有唯一标识符,你也可以使用一个自动生成的标识符。在这种情况下,你可以使用 id() 函数来为每个元素生成一个唯一的标识符。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Person {
let name: String
}

struct ContentView: View {
let people = [
Person(name: "Alice"),
Person(name: "Bob"),
Person(name: "Charlie"),
]

var body: some View {
List(people, id: \.self) { person in
Text(person.name)
}
}
}

这里的 id: .self 会告诉 SwiftUI 使用每个元素本身作为标识符。