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