在 swiftui 中使用 if else 自定义着色?

custom coloring with if else in swiftui?

我正在 SwiftUI 上制作地震应用程序。我收到的数据包括地震的震级,我希望打印在屏幕上的文本根据震级改变颜色。

比如我可以说:我希望它小于3显示绿色,3到5之间显示黄色,5到7之间显示红色,大于7显示黑色.

你能帮帮我吗?

谢谢

可以用ternary运算符,小于3显示绿色,3~5之间显示黄色,5~7之间显示红色,大于7显示黑色。例如:

struct ContentView: View {
    @State var quake = 2
    
    var body: some View {
        Text("quake in ")
            .foregroundColor(quake < 3 ? .green
                             : quake <= 5 ? .yellow
                             : quake <= 7 ? .red
                             : .black)
    }
}

有很多方法可以解决这个问题,我相信如果你知道如何做一个if-else语句,你可以自己做。由于您可能正在与 swift 或 swiftUI 本身

作斗争

这里有 3 种方法可以做到 首先是

struct ContentView: View {
    @State var quake = 2
    
    var body: some View {
        if (quake < 3) {
           Text("Earthquake")
             .foregroundColor(.green)
        } else if (quake <= 5) {
           Text("Earthquake")
             .foregroundColor(.yellow)
        } else if // etc...
    }
}

但效率很低,因此第二种解决方案是在前景色本身内迭代它

struct ContentView: View {
    @State var quake = 2
    
    var body: some View {
      Text("Earthquake")
             .foregroundColor(quake < 3 ? .green : quake <= 5 ? .yellow : // etc)
    }
}

你所要做的就是把

condiditon ? if its true : if codition ?  if it's true : if condition //etc untill else

基本一样

if condition then do something
else if condition
 up untill
else

最后一个解决方案是创建一个 returns 关键的函数,我相信这个 beginner-friendly 比第二个

struct ContentView: View {
    @State var quake = 2

    private func getColor() -> Color {
        if quake <= 3 {
            return .green
        } else if quake <= 5 {
            return .yellow
        }
        return .black // default, random, you decide the last condition
    }
    var body: some View {
        Text("Earthquake")
            .foregroundColor(self.getColor())
    }
}