[SwiftUI 知识碎片] Debris-12 条件 Modifier

395 阅读2分钟
更多内容欢迎关注公众号 「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及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~