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) } }'''
Tengo este código en el que quiero cambiar la apariencia del color del texto en función de que un usuario diga sí o no. Intenté crear una var como "var color: Color" en las declaraciones if, sin embargo, seguía diciendo que no se ajustaba a la vista. ¿Cómo puedo hacer un código condicional de manera efectiva en lugar de tener que copiar todo lo anterior una y otra vez?
Podría usar una propiedad calculada que devuelva un Color basado en la propiedad reserved del usuario:
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) } } Tenga en cuenta que puede evitar el default si cambió reserved a una enum en lugar de una String