SwiftUI 中根据条件返回不同视图的问题
发布
更新
字数
230
阅读
2 分钟
阅读量
1016
SwiftUI 中仅支持基本的 if condition
显示内容,但不支持 if let
或 case
。
struct MyView: View {
@State var isVisible: Bool = true
var body: some View {
VStack {
if isVisible {
Text("Visible")
} else {
Text("Invisible")
}
Text(isVisible ? "True" : "False")
}
.gesture(TapGesture().onEnded {
_ in
self.isVisible.toggle()
})
}
}
但 if let
或 case
都不支持,变通的方法是:
使用计算属性或函数返回一个 **Bool**
值
enum Status {
case active, disabled
}
struct MyView: View {
@State var status: Status
private var isVisible: Bool {
switch status {
case .active: return true
case .disabled: return false
}
}
var body: some View {
VStack {
if isVisible {
Text("Visible")
} else {
Text("Invisible")
}
}
}
}
使用函数或计算属性返回一个视图
sturct MyView: View {
// ...
private var visibleView: some View {
switch status {
case .active: return Text("Visible")
case .disabled: return Text("Invisible")
}
}
var body: some View {
visibleView
}
}
注意,用函数或计算属性返回的视图需要类型一致,否则会报错