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

430
Vistas
¿Cuál es la forma más limpia en Swift de arrojar un error opcional?

Para desenvolver un opcional y pasarlo a una función que normalmente uso:

 var optionalInt: Int? optionalInt.map { someFunctionThatTakes(aNonOptional: $0) }

Ahora tengo un error opcional que me gustaría lanzar si no es nulo:

 var optionalError: Error? optionalError.map { throw $0 }

Esto no funcionará porque el cierre pasado al mapa no se puede lanzar.

Una solución alternativa sería utilizar la sintaxis if let completa:

 if let theError = optionalError { throw theError }

Pero esto usa el nombre de variable theError dos veces y es más propenso a errores que la hermosa implementación .map .

¿Alguien sabe una forma más limpia de implementar esto?

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

0

Esto no funcionará porque el cierre pasado al mapa no se puede lanzar.

Eso no es cierto. El cierre pasó a

 func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?

puede arrojar un error. Pero eso hace que map() se llame a sí mismo una expresión de (re)lanzamiento, por lo tanto, debe llamarse con try :

 var optionalError: Error? // ... try optionalError.map { throw $0 }

probablemente todavía usaría

 if let theError = optionalError { throw theError }

lo cual es muy claro y no usa Optional.map por sus efectos secundarios (¿descartando el valor de retorno de tipo Void? ).

over 4 years ago · Santiago Trujillo Denunciar

0

si no usa el método try delante del mapa, dará error

La llamada puede lanzarse pero no está marcada con 'intentar'

En su lugar, use try para arrojar un error.

 enum IntParsingError: Error { case overflow case invalidInput(String) } var optionalError: Error? = IntParsingError.overflow do { try optionalError.map { throw $0 } } catch { print(error) }

También puede usar flatMap porque evalúa que la instancia opcional de cierre no es nula

 optionalError.flatMap(throw $0)

Pero aún así, If let sería la mejor manera de manejar el error opcional en lugar de map y flatMap.

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes crear una extensión para Swift.Error

 extension Swift.Error { func throwIfNeeded() throws { throw self } }

Y llamarlo en error opcional

 try error?.throwIfNeeded()
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