Menu
Coddy logo textTech

try? e try!

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 46 de 56.

Às vezes você não se importa com qual erro uma função lançou, você apenas quer um resultado ou uma alternativa. O Swift oferece duas formas curtas.

try? transforma qualquer erro lançado em nil. O resultado é um Optional do tipo de retorno da função:

enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }

let result = try? risky()        // nil
let safe   = (try? risky()) ?? 0 // 0

Combine-o com ?? para um valor padrão inline. Esta é a versão mais curta de "chame isso, me dê um valor de qualquer maneira".

try! diz "Eu sei que isso não vai lançar um erro". Se lançar, seu programa trava. Use-o apenas quando você puder provar que a chamada é segura; no código do dia a dia, prefira try? com um fallback ou o do/catch completo.

challenge icon

Desafio

Fácil

Defina NumError: Error com um caso bad. Defina uma função que lança erros parseEven(_ s: String) throws -> Int que:

  • Lança .bad quando s não puder ser analisado como Int, ou quando o valor analisado for ímpar
  • Caso contrário, retorna o inteiro analisado

Leia uma única linha de entrada: uma lista de strings separadas por vírgula. Para cada uma, use try? seguido por ?? -1 para obter o inteiro par analisado ou -1.

Imprima, em ordem, os inteiros resultantes unidos com ,. Em seguida, em uma segunda linha, imprima a contagem de valores que retornaram como -1.

Para a entrada 4,7,abc,8,11,2, a saída é:

4,-1,-1,8,-1,2
3

Folha de consulta

try? converte um erro lançado em nil, retornando um Optional:

let result = try? risky()        // nil ao lançar erro
let safe   = (try? risky()) ?? 0 // valor de fallback

try! causa um crash se a chamada lançar um erro — use apenas quando a chamada for garantidamente segura:

let value = try! guaranteedSafe()

Experimente você mesmo

let parts = readLine()!.components(separatedBy: ",")

// TODO: enum NumError; func parseEven(_:) throws -> Int;
// para cada parte, (try? parseEven(part)) ?? -1
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo