Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
Convierta de declaración de cambio de caso a un valor en Swift

Tal vez esta es una pregunta tonta

Tengo una declaración de cambio de caso como esta:

 self.text = type.rawValue switch type { case .teuro: self.backgroundColor = UIColor.sapphireColor() case .lesson: self.backgroundColor = UIColor.orangeColor() case .profession: self.backgroundColor = UIColor.pinkyPurpleColor() }

¿Hay alguna manera de escribirlo en algo como este ejemplo:

 self.backgroundColor = { switch type { case .teuro: return UIColor.sapphireColor() case .lesson: return UIColor.orangeColor() case .profession: return UIColor.pinkyPurpleColor() } }

Se agradece cualquier comentario o respuesta. Gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¡Ya casi estás allí!

Ha creado un cierre que devuelve un color y lo está asignando a una propiedad UIColor , ¡pero un cierre no es un color!

Solo necesita llamar (invocar) al cierre para ejecutarlo , de modo que devuelva el color que desea:

 self.backgroundColor = { switch type { case .teuro: return UIColor.sapphireColor() case .lesson: return UIColor.orangeColor() case .profession: return UIColor.pinkyPurpleColor() } }() // <---- notice the brackets!
over 4 years ago · Santiago Trujillo Denunciar

0

Por lo general, no desea mezclar sus modelos y su interfaz de usuario, y solo necesita usar estos colores dentro de una vista

Es por eso que terminé creando tales extensiones, a las que solo se puede acceder dentro del archivo actual de la vista:

 private extension Type { var backgroundColor: UIColor { switch self { case .teuro: return .sapphireColor() case .lesson: return .orangeColor() case .profession: return .pinkyPurpleColor() } } }
over 4 years ago · Santiago Trujillo Denunciar

0

Sweeper tiene toda la razón, puede inicializar esto con un cierre agregando el () faltante al final. Así que esa es la respuesta literal a tu pregunta.

Pero Philip también tiene razón, que sería mejor agregar una extensión a su tipo de enumeración para definir un mapeo entre colores y sus casos. Abstrae el esquema de color tanto del punto de llamada (por ejemplo, asegurando que tiene una aplicación consistente de colores en toda la aplicación, sin repetirse nunca), pero al mismo tiempo, evita enredar el esquema de color de la interfaz de usuario con algún tipo de enumeración básica.

Pero me gustaría ir un paso más allá, es decir, extender esta observación también a la propiedad del text . No debe usar las cadenas rawValue en su interfaz de usuario. Los códigos sin procesar (si los tiene) no deben combinarse con las cadenas que desea mostrar en la interfaz de usuario. Una es una pregunta de codificación, mientras que la otra es una pregunta de interfaz de usuario.

Entonces, no solo movería el color a una extensión, sino también el texto de la pantalla, por ejemplo, definiría una propiedad de text :

 extension MyEnumerationType { var text: String { rawValue } }

Entonces podrías hacer:

 self.text = myEnumerationInstance.text

Ahora aquí sigo usando rawValue , pero lo estoy abstrayendo de la interfaz de usuario. La razón es que es posible que desee eventualmente admitir diferentes cadenas, pero no cambiar sus códigos rawValue . Por ejemplo, es posible que desee admitir la localización en algún momento:

 extension MyEnumerationType { var text: String { NSLocalizedString(rawValue, comment: "MyEnumerationType") } }

O puede tener una declaración de switch dentro de esta propiedad calculada de text . Pero evita el acoplamiento estrecho de la representación interna de su enumeración ( rawValue ) de la interfaz de usuario.

Entonces, en resumen, no solo debe abstraer el esquema de color del tipo en sí, sino que también debe abstraer el texto de visualización. De esa forma, puede cambiar el texto que se muestra en una fecha futura, pero no romper el código que dependía de los valores rawValue antiguos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda