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

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

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

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

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 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