【问题标题】:What does List var in NavigationLink mean in SwiftUINavigationLink 中的 List var 在 SwiftUI 中是什么意思
【发布时间】:2020-12-23 12:26:08
【问题描述】:

以下是我的简单 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 添加一个导航链接。但是,这是我的猜测,我想知道这背后的真正语法。我已经阅读了有关 List 的文档,还阅读了有关 swift 语法的官方文档。我没有发现任何有用的东西。我以为是先闭包,结果发现还是有区别的。 谁能帮忙,拜托。

【问题讨论】:

标签: swift swiftui swiftui-list swiftui-navigationlink


【解决方案1】:

List是一个结构体,它是一个View,在初始化时,它以一个闭包作为参数。

你可以把这个闭包想象成一个函数,这样这个函数就有点像这样了。

funcimagineFunc(item: YourItem) -> YourRowContent { //这里有一些代码 返回 YourRowContent }

注意:以上功能仅供说明之用。没有这样的类型。

所以,当 ListView 想要创建它的行之一时,List 调用这个给定的闭包(imagineFunc)并获得一个 RowContent/row 视图。

根据您的代码,当列表视图调用给定的闭包时(对于每一行),您返回了一个 NavigationLink(您可以将其想象为一个按钮,当它在导航视图中时可以导航到另一个视图)。让每一行都成为 List 中的 NavigationLink。

【讨论】:

    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多