更多内容欢迎关注公众号 「Swift花园」
在实践中,希望 modifier 在某些条件满足时才应用的需求很常见。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 条件来基于某些 state 返回不同的视图,但只限于少数一些情况。
举个例子,下面的代码是不合法的:
var body: some View {
if self.useRedText {
return Text("Hello World")
} else {
return Text("Hello World")
.background(Color.red)
}
}记住,some View 指的是 “某种特定类型的 View 会被返回,但我们不想指明具体是什么类型。” 因为 SwiftUI 基于泛型 ModifiedContent 包装器创建视图的方式,Text(…) a和 Text(…).background(Color.red) 实际上是不同的类型,因此和 some View 不兼容。
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~