Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

429
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!