Swift:
Tratamento de erros

Como fazer:

Swift utiliza o tratamento de erros com os blocos do, try e catch. Vamos dar uma olhada:

enum FileError: Error {
    case fileDoesNotExist
    case noPermission
}

func readFile(atPath path: String) throws -> String {
    // Imagine que temos alguma lógica aqui para verificar se um arquivo existe e se temos permissão para lê-lo
    let fileExists = false
    let havePermission = true

    if !fileExists {
        throw FileError.fileDoesNotExist
    }

    if !havePermission {
        throw FileError.noPermission
    }

    return "O conteúdo do arquivo vai aqui"
}

do {
    let fileContent = try readFile(atPath: "/caminho/para/o/arquivo")
    print(fileContent)
} catch FileError.fileDoesNotExist {
    print("Ops! Arquivo não encontrado.")
} catch FileError.noPermission {
    print("Ah! Sem permissão para ler o arquivo.")
} catch {
    print("Ocorreu um erro desconhecido.")
}

Saída de Exemplo:

Ops! Arquivo não encontrado.

Mergulho Profundo

O tratamento de erros nem sempre foi tão bacana como é agora. Em Objective-C, você lidava com ponteiros para objetos NSError, o que parecia desajeitado. Agora, temos um sistema mais elegante com enums do Swift e o protocolo Error.

A instrução throw do Swift nos permite sinalizar que algo saiu errado. Blocos do agem como domínios conscientes de erros, a prefixação try chama o negócio arriscado, e catch lida com as coisas se elas derem errado.

Optionals são uma alternativa para situações que não estão exatamente no status de “erro”, mas ainda podem ter “nenhum resultado”. Eles são um pouco como as variáveis de Schrödinger—ou têm um valor ou não têm.

Para uma profundidade real, confira os tipos Result, que são híbridos elegantes entre padrões de retorno regular e de erro.

Veja Também