Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

191
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda