Swift 中的 ForEach 循环使用二维数组的内容
ForEach loop in Swift to use content of 2D array
我想使用 ForEach 循环,但它不起作用。
let navigation = [["Kunde", "person"], ["Wartung", "gear"]]
NavigationView {
List {
NavigationLink(destination: ListView(title: "Kunde")) {
Label("Kunde", systemImage: "person")
}
NavigationLink(destination: ListView(title: "Wartung")) {
Label("Wartung", systemImage: "gear")
}
// MANY MORE
}
}
我的方法打印从 0 到 7 的数字,但我想要数组的内容。
我的做法:
let navigation = [["Kunde", "person"], ["Wartung", "gear"]]
NavigationView {
List {
ForEach(navigation.indices) { index in
NavigationLink(destination: ListView(title: "\(index)")) {
Label("\(self.index)", systemImage: "\(index)")
}
}
}
}
您只给出了 index
。例如,您可以 navigation[index][0]
来获取标题,但这非常乏味。
更好的方法是创建一个自定义类型,而且它也是 Identifiable
,因此在可变项目列表上使用更安全。
代码:
struct ContentView: View {
private let navigation = [
NavigatableView("Kunde", image: "person"),
NavigatableView("Wartung", image: "gear")
]
var body: some View {
NavigationView {
List {
ForEach(navigation) { newView in
NavigationLink(destination: ListView(title: newView.title)) {
Label(newView.title, systemImage: newView.image)
}
}
}
}
}
}
struct NavigatableView: Identifiable {
let id = UUID()
let title: String
let image: String
init(_ title: String, image: String) {
self.title = title
self.image = image
}
}
我想使用 ForEach 循环,但它不起作用。
let navigation = [["Kunde", "person"], ["Wartung", "gear"]]
NavigationView {
List {
NavigationLink(destination: ListView(title: "Kunde")) {
Label("Kunde", systemImage: "person")
}
NavigationLink(destination: ListView(title: "Wartung")) {
Label("Wartung", systemImage: "gear")
}
// MANY MORE
}
}
我的方法打印从 0 到 7 的数字,但我想要数组的内容。
我的做法:
let navigation = [["Kunde", "person"], ["Wartung", "gear"]]
NavigationView {
List {
ForEach(navigation.indices) { index in
NavigationLink(destination: ListView(title: "\(index)")) {
Label("\(self.index)", systemImage: "\(index)")
}
}
}
}
您只给出了 index
。例如,您可以 navigation[index][0]
来获取标题,但这非常乏味。
更好的方法是创建一个自定义类型,而且它也是 Identifiable
,因此在可变项目列表上使用更安全。
代码:
struct ContentView: View {
private let navigation = [
NavigatableView("Kunde", image: "person"),
NavigatableView("Wartung", image: "gear")
]
var body: some View {
NavigationView {
List {
ForEach(navigation) { newView in
NavigationLink(destination: ListView(title: newView.title)) {
Label(newView.title, systemImage: newView.image)
}
}
}
}
}
}
struct NavigatableView: Identifiable {
let id = UUID()
let title: String
let image: String
init(_ title: String, image: String) {
self.title = title
self.image = image
}
}