簡體   English   中英

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

上面一行是什么意思? 我的猜測是我們列出了我們擁有的物品,然后為我們擁有的每種食物添加了一個導航鏈接。 但是,這是我的猜測,我想知道這背后的真正語法。 我已經通過有關 swift 語法的官方文檔閱讀了有關List和 go 的文檔。 我沒有找到任何有用的東西。 我先以為是閉包,結果發現還是有區別的。 誰能幫忙,請。

List 是一個結構體,它是一個視圖,它在初始化自身時將閉包作為參數。

你可以把這個閉包想象成一個 function,所以這個 function 有點像這樣。

func imagineFunc(item: YourItem) -> YourRowContent { //這里有一些代碼 return YourRowContent }

注:以上function僅作說明。 沒有這樣的類型。

因此,當 ListView 想要創建其行之一時,List 會調用這個給定的閉包(imagineFunc)並獲得一個 RowContent/行視圖。

根據您的代碼,當列表視圖調用給定的閉包(對於每一行)時,您返回了一個 NavigationLink(您可以將其想象成一個按鈕,當它在導航視圖中時可以導航到另一個視圖)。 這樣每一行都成為列表中的 NavigationLink。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM