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不兼容。

Previous: 为什么SwiftUI使用 some View 作为视图类型?

Hacking with iOS: SwiftUI Edition

Next: 环境修饰符