SwiftUI:条件修饰符

通常需要仅在满足特定条件时才应用的修饰符,在SwiftUI中,最简单的方法是使用三元运算符。

提醒一下,要使用三元运算符,首先编写条件,然后是问号,如果条件为真,则应使用什么,如果条件为假,则应使用冒号后跟什么。

例如,如果您有一个可以为true或false的属性,则可以使用该属性来控制按钮的前景色,如下所示:

struct ContentView: View {
    @State private var useRedText = false

    var body: some View {
        Button("Hello World") {
            // flip the Boolean between true and false
            self.useRedText.toggle()            
        }
        .foregroundColor(useRedText ? .red : .blue)
    }
}

因此,当useRedText为true时,修饰符有效地读取.foregroundColor(.red),当它为false时,修饰符变为.foregroundColor(.blue)。因为SwiftUI监视@State属性中的更改,并重新调用body属性,只要该属性更改,颜色就会立即更新。

有时可以使用常规if条件返回基于某个状态的不同视图,但这仅在少数情况下是可能的。

例如,这种代码是不允许的:

var body: some View {
    if self.useRedText {
        return Text("Hello World")
    } else {
        return Text("Hello World")
            .background(Color.red)
    }
}

记住,some View意味着“将返回一种特定类型的视图,但我们不想说它是什么。”由于SwiftUI使用通用的ModifiedContent包装器创建新视图的方式, Text(…)Text(…).background(Color.red)是不同的底层类型,这与some View不兼容。

译自Conditional modifiers

Previous: 为什么SwiftUI使用 some View 作为视图类型? Hacking with iOS: SwiftUI Edition Next: 环境修饰符

赏我一个赞吧~~~

你可能感兴趣的:(SwiftUI:条件修饰符)