首页 > 解决方案 > NavigationLink 语法

问题描述

我正在尝试学习 SwiftUI 和 Swift,所以我在这里完全是新手。我首先阅读有关 Swift 语言的文档,制作一个控制台应用程序并在那里玩弄一堆语言的概念。然后我尝试了 SwiftUI,我立即看到一堆语言本身没有记录的语法。

所以我又挖掘了一些,我发现在幕后有一堆编译器和语言魔法正在发生,这使得我在 SwiftUI 中看到的语法可以工作。很多魔法可能没有很好的记录。因此,我四处挖掘并找到了有关我所看到的 SwiftUI 语法的大部分问题的答案。除了这个:

        NavigationView{
            VStack {
                Text("Select your device")
                
                List{
                    NavigationLink{
                       SensorView()
                    } label:{
                        Text("Raspberry Pi Zero")
                   }
                }
            }

label:NavigationLink 闭包的花括号之外的语句是什么?我可以在我的应用程序中看到它在 NavigationLink 中创建了一个标签,但我不明白为什么 label: 在花括号之外,在我看来,它或多或少地与它似乎关联的 NavigationLink 分离?我试图理解这一点,所以我会知道何时/何地应用这种模式。我从别人的示例中复制了上面的代码。

任何见解或教导将不胜感激。

标签: swiftswiftui

解决方案


这种新语法是最近发布的Multiple Trailing Closures的一部分。让我们看看你的NavigationLink初始化程序

init(destination: () -> Destination, label: () -> Label)

在这里,有 2 个参数接受闭包:destinationlabel. 所以,这意味着你可以这样写(简单,正常的方式):

NavigationLink(destination: {
    Text("The destination")
}, label: {
    Text("Click me!")
})

或者,通过尾随闭包语法

NavigationLink(destination: {
    Text("The destination")
}) {
    Text("Click me!")
}

或者你在你的问题中做了什么。label:注意:当您有多个尾随闭包时,您需要在第一个之后为所有闭包添加参数标签(例如)。

NavigationLink {
    Text("The destination")
} label: {
    Text("Click me!")
}

推荐阅读