SwiftUI 中根据条件返回不同视图的问题

发布
更新
字数 230
阅读 2 分钟
阅读量 984

SwiftUI 中仅支持基本的 if condition 显示内容,但不支持 if letcase

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

注意,用函数或计算属性返回的视图需要类型一致,否则会报错

参考: https://jasonzurita.com/swiftui-if-statement/