如何有条件地格式化SwiftUI代码


if(user.reserved == "yes") {
HStack {
Image(systemName: "person.crop.circle.badge.checkmark").foregroundColor(.green)

Text("(user.name)").foregroundColor(.green)
}
} else if (user.reserved == "no"){
HStack {
Image(systemName: "person.crop.circle.badge.checkmark").foregroundColor(.red)

Text("(user.name)").foregroundColor(.red)
}
} else if (user.reserved == "waiting") {
HStack {
Image(systemName: "person.crop.circle.badge.checkmark").foregroundColor(.orange)

Text("(user.name)").foregroundColor(.orange)
}
}

''

我有这样的代码,我想根据用户说是或否来更改文本颜色的外观;var color:颜色;然而,在if的声明中,它一直表示不符合这一观点。我如何才能有效地生成条件代码,而不必一次又一次地复制过去的每一件事?

您可以使用一个基于用户的reserved属性返回Color的计算属性:

struct User {
var reserved : String
var name : String
}
struct ContentView: View {
@State private var user = User(reserved: "waiting", name: "Bob")

var colorForReserved : Color {
switch user.reserved {
case "yes":
return .green
case "no":
return .red
case "waiting":
return .orange
default:
return .black
}
}

var body: some View {
HStack {
Image(systemName: "person.crop.circle.badge.checkmark")
Text(user.name)
}
.foregroundColor(colorForReserved)
}
}

请注意,如果将reserved更改为enum而不是String,则可以避免使用default

最新更新