swift - 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 分离?我试图理解这一点,所以我会知道何时/何地应用这种模式。我从别人的示例中复制了上面的代码。
任何见解或教导将不胜感激。
解决方案
这种新语法是最近发布的Multiple Trailing Closures的一部分。让我们看看你的NavigationLink
初始化程序:
init(destination: () -> Destination, label: () -> Label)
在这里,有 2 个参数接受闭包:destination
和label
. 所以,这意味着你可以这样写(简单,正常的方式):
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!")
}
推荐阅读
- google-classroom - 我无法使用 GAS 删除 Google 课堂课程
- mongodb - 使用复合运算符的 Mongo Go 驱动程序搜索自动完成
- javascript - 有没有办法改进通过 indexOf 将子字符串与搜索位置文本分开的方法?
- json - 如何将选定的单选按钮组值保存在变量中以供以后使用?
- c# - Unity OnMouseOver 偏移到我的鼠标实际位置
- java - 使用 Java 将文件写入 Google Cloud Storage 后临时文件不会被删除
- reactjs - react-testing-library中基于动态导入svg的测试图标
- javascript - 无法将字符从一个字符串替换到另一个字符串 - 是 Javascript 错误吗?
- reactjs - 材质 UI 日历输入字段
- java - android studio中的崩溃工具栏