Max*_*tov 15 macos ios swift swiftui
在 SwiftUI 中,经常需要根据某些条件显示“空”视图,例如:
struct OptionalText: View {
let text: String?
var body: some View {
guard let text = text else { return }
return Text(text)
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不编译自体guard必须返回一些观点,那就是当一个“空”的观点text是nil。如何把这个例子被重写,使其和编译时会生成一个“空”的看法text是nil?
Pro*_*in8 18
你必须返回一些东西。如果在某些情况下您不想显示任何内容,请“显示”一个... EmptyView;)
var body: some View {
Group {
if text != nil {
Text(text!)
} else {
EmptyView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
SwiftUI DSL 将要求您将 if/else 包装在 a 中Group,并且 DSL 没有保护/if let 命名法。
paw*_*222 11
您可以使用@ViewBuilder. 那么你甚至不需要EmptyView:
@ViewBuilder
var body: some View {
if let text = text {
Text(text)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,此处您@ViewBuilder仅用于构建视图。如果您想了解更多有关幕后如何完成的信息,请参阅以下答案:
从 Xcode 12 beta 2 开始,Group不再需要视图并且if let支持声明,因此结果body可以更简洁一点:
var body: some View {
if let text = text {
Text(text)
} else {
EmptyView()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9548 次 |
| 最近记录: |