NavigationLink 中的 List var 在 SwiftUI 中意味着什么
What does List var in NavigationLink mean in SwiftUI
以下是我的简单 contentView 代码
struct ContentView: View {
@State private var selection = 1;
@State private var addFood = false;
var listItems = [
Food(name: "List Item One"),
Food(name: "List Item Two")
]
var body: some View {
TabView(selection: $selection) {
NavigationView {
List(listItems){
food in NavigationLink(destination: FoodView(selec: selection)) {
Text(food.name)
}
}.navigationBarTitle(Text("Fridge Items"), displayMode: .inline)
.navigationBarItems(trailing:
NavigationLink(destination: FoodView(selec: selection)) {
Image(systemName: "plus.circle").resizable().frame(width: 22, height: 22)
} )
}
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}
.tag(1)
Text("random tab")
.font(.system(size: 30, weight: .bold, design: .rounded))
.tabItem {
Image(systemName: "bookmark.circle.fill")
Text("profile")
}
.tag(0)
}
}
}
struct FoodView: View{
var selec: Int?
var body: some View{
NavigationView{
Text("food destination view \(selec!)");
}
}
}
我遵循一些教程来达到这一点。但是,我对语法感到困惑
List(listItems){
food in NavigationLink(destination: FoodView(selec: selection)) {
Text(food.name)
}
上面一行是什么意思?我的猜测是我们列出了我们拥有的物品,然后为我们拥有的每个 food 添加了一个导航 link。但是,这是我的猜测,我想知道这背后的真正语法。我已经阅读了有关 List 的文档,还阅读了有关 swift 语法的官方文档。我没有找到任何有用的东西。我先以为是闭包,结果发现还是有区别的。
有谁能帮忙吗
List 是一个 struct,它是一个 View,它在初始化时以一个闭包作为参数。
你可以把这个闭包想象成一个函数,所以这个函数有点像这样。
func imagineFunc(item: YourItem) -> YourRowContent {
//这里有一些代码
return YourRowContent
}
注:以上功能仅作说明。没有这样的类型。
所以,当 ListView 想要创建其行之一时,List 会调用这个给定的闭包(imagineFunc)并获得 RowContent/row 视图。
根据您的代码,当列表视图调用给定的闭包(对于每一行)时,您有 return 一个 NavigationLink(您可以将其想象成一个按钮,当它在导航视图中时可以导航到另一个视图).这样每一行都成为您列表中的 NavigationLink。
以下是我的简单 contentView 代码
struct ContentView: View {
@State private var selection = 1;
@State private var addFood = false;
var listItems = [
Food(name: "List Item One"),
Food(name: "List Item Two")
]
var body: some View {
TabView(selection: $selection) {
NavigationView {
List(listItems){
food in NavigationLink(destination: FoodView(selec: selection)) {
Text(food.name)
}
}.navigationBarTitle(Text("Fridge Items"), displayMode: .inline)
.navigationBarItems(trailing:
NavigationLink(destination: FoodView(selec: selection)) {
Image(systemName: "plus.circle").resizable().frame(width: 22, height: 22)
} )
}
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}
.tag(1)
Text("random tab")
.font(.system(size: 30, weight: .bold, design: .rounded))
.tabItem {
Image(systemName: "bookmark.circle.fill")
Text("profile")
}
.tag(0)
}
}
}
struct FoodView: View{
var selec: Int?
var body: some View{
NavigationView{
Text("food destination view \(selec!)");
}
}
}
我遵循一些教程来达到这一点。但是,我对语法感到困惑
List(listItems){
food in NavigationLink(destination: FoodView(selec: selection)) {
Text(food.name)
}
上面一行是什么意思?我的猜测是我们列出了我们拥有的物品,然后为我们拥有的每个 food 添加了一个导航 link。但是,这是我的猜测,我想知道这背后的真正语法。我已经阅读了有关 List 的文档,还阅读了有关 swift 语法的官方文档。我没有找到任何有用的东西。我先以为是闭包,结果发现还是有区别的。 有谁能帮忙吗
List 是一个 struct,它是一个 View,它在初始化时以一个闭包作为参数。
你可以把这个闭包想象成一个函数,所以这个函数有点像这样。
func imagineFunc(item: YourItem) -> YourRowContent { //这里有一些代码 return YourRowContent }
注:以上功能仅作说明。没有这样的类型。
所以,当 ListView 想要创建其行之一时,List 会调用这个给定的闭包(imagineFunc)并获得 RowContent/row 视图。
根据您的代码,当列表视图调用给定的闭包(对于每一行)时,您有 return 一个 NavigationLink(您可以将其想象成一个按钮,当它在导航视图中时可以导航到另一个视图).这样每一行都成为您列表中的 NavigationLink。