O tratamento de erros é essencial para o sucesso de cada aplicativo, garantindo que os usuários finais possam navegar facilmente pelo aplicativo e usar os recursos corretamente.

Neste tutorial, aprenderemos como para detectar e resolver erros em um aplicativo de livraria simples desenvolvido usando Swift, a linguagem de programação de propósito geral desenvolvida pela Apple e pela comunidade de código aberto.

Pré-requisitos

Para iniciar este tutorial, certifique-se de você tem o seguinte:

Familiaridade com a programação Swift Xcode instalado em sua máquina local Online Swift Playground para usuários do Windows

Configurando o projeto

Para começar a construir nosso aplicativo de livraria, vamos criar um playground Xcode em branco abrindo um aplicativo Xcode e selecionando Vazio em Outro tab.

Em seguida, crie um novo arquivo de playground dentro do diretório recém-criado e nomeie-o.

Deve haver um código padrão no arquivo ; modifique-o para o código abaixo e clique no botão Reproduzir para garantir que o código esteja em execução:

import UIKit var str=”Hello, playground”print (str)

Executando este aplicativo imprime Olá, playground no console.

Com tudo isso feito, estamos prontos para começar a construir.

Construindo um aplicativo com Swift

Desde estamos construindo um aplicativo de livraria simples, devemos criar duas classes: uma para o usuário que compra um livro e outra para o item comprado.

A classe User contém o nome do usuário e o saldo disponível, enquanto o Item a classe contém o nome do livro, o preço do livro e a quantidade do livro restante na loja:

class User {var name: String var walletBalance: Double init (name: String, walletBalance: Double) { self.name=name self.walletBalance=w alletBalance}} class Item {var bookName: String var price: Double var qtyLeft: Int init (bookName: String, price: Double, qtyLeft: Int) {self.bookName=bookName self.price=price self.qtyLeft=qtyLeft}}

Em nosso exemplo, um usuário tem um saldo de carteira específico para comprar um livro na loja. Para garantir que isso possa ser feito em nosso aplicativo, devemos criar um usuário e livro padrão:

let user1=User (name:”Wisdom Ekpot”, walletBalance: 2000) let storeItem=Item (bookName:”Oliver Twist”, price: 1000, qtyLeft: 12)

A seguir, vamos criar uma função que permite ao usuário comprar um livro na loja:

func purchaseBookFromStore (usuário: Usuário, livro: Item) {user.walletBalance-=book.price book.qtyLeft-=1 print (“\ (user.name) comprado com sucesso \ (book.bookName) da loja em \ (book.price) naira”) print (“Número total de livros restantes=\ (book.qtyLeft)”) print (“Novo saldo da carteira=\ (user.walletBalance)”)}

Esta função considera a classe Usuário e a classe Item como parâmetros. A função então deduz o preço do livro do saldo da carteira do usuário e reduz a quantidade do livro Oliver Twist disponível para compra.

Depois de reduzir as duas quantidades, a função imprime o número de livros restantes e a carteira do usuário Saldo. Para executar o programa, devemos chamar o nome da função e passar as classes User e Item como parâmetros:

purchaseBookFromStore (user: user1, book: Item)

Clique no botão Reproduzir para execute o aplicativo. Assim que o programa terminar de compilar, o seguinte será impresso no console:

Casos de teste de erro em um aplicativo Swift

Dois problemas principais podem surgir neste aplicativo que nós não considerou:

E se o saldo da carteira do usuário não puder pagar um livro na loja? E se a quantidade de livros na loja for menor do que a quantidade que o usuário deseja comprar?

Vamos testar nosso código atual com esses casos de teste individualmente.

Erro de preço

Se definirmos o saldo da carteira do usuário para $ 500 com let user1=User (name:”Wisdom Ekpot”, walletBalance: 500) e, em seguida, tente comprar $ 1000 de cópias do livro Oliver Twist com let storeItem=Item (bookName:”Oliver Twist”, preço: 1000, qtyLeft: 12), as seguintes impressões no console:

O novo saldo da carteira do usuário agora é-500,0, o que é um erro. Em vez de deduzir o preço total do livro da carteira do usuário, devemos imprimir uma mensagem de erro quando o saldo da carteira do usuário for menor que o preço do livro.

Erro de quantidade

Outro caso de teste que que podemos encontrar em nosso aplicativo de compras é quando há menos livros na loja do que os livros necessários para um usuário.

Se definirmos a quantidade do livro Oliver Twist na loja como 0 com let storeItem=Item (bookName:”Oliver Twist”, preço: 1000, qtyLeft: 0) e, em seguida, chamar a função purchaseBookFromStore para comprar 1 livro, o console imprime o seguinte:

Como podemos ver, o total o número de livros na loja agora é-1. Novamente, imprimir uma mensagem de erro aqui permitiria ao usuário saber que o número de livros na loja é menor do que a quantidade necessária.

Manipulando erros em um aplicativo Swift

Para corrigi-los casos de erro, vamos escrever uma condição para verificar se o usuário pode pagar este livro e se a quantidade de livro disponível é menor do que a quantidade exigida pelo usuário. Se o usuário não puder pagar pelo livro ou se não houver quantidade suficiente do livro, podemos lançar um erro.

Dentro do bloco de funções purchaseBookFromStore, adicione esta condição antes de realizar qualquer operação:

se o usuário.walletBalance Neste ponto, um erro é gerado se a condição for atendida, e o código abaixo da condição não será executado.

Também devemos garantir esta função tem a capacidade de gerar um erro. Para fazer isso, devemos modificar nossa função purchaseBookFromStore com o seguinte:

func purchaseBookFromStore (usuário: Usuário, livro: Item) throws {if user.walletBalance Observe a palavra-chave throws antes das chaves ; isso modifica como estamos chamando a função e indica que ela pode gerar um erro.

Em seguida, devemos envolver nossa função purchaseBookFromStore em um bloco do-catch. Se a função retornar um erro, o bloco catch captura o erro e o imprime no console:

do {try purchaseBookFromStore (user: user1, book: storeItem)} catch {print (“something went wrong”)}

Se executarmos nosso aplicativo novamente, obteremos o seguinte no console. Lembre-se de usar qualquer um dos casos de teste de erro que mencionamos anteriormente para obter a mensagem de erro no console.

Lançamento de um erro definido

Com o estado atual de nosso aplicativo , a função não está gerando o erro apropriado para nos informar o que deu errado. Para fazer isso, devemos definir os erros personalizados que queremos lançar usando um enum Swift, que está em conformidade à classe de erro embutida do Swift .

Os enums do Swift são particularmente adequados para modelar um grupo de condições de erro relacionadas porque agrupa valores relacionados e nos permite trabalhar com esses valores em um tipo maneira segura dentro do código:

enum PurchaseError: Error {case InsufficentWalletBalance case InsufficentBookQty}

Com este enum definido, devemos quebrar a condição em nossa função purchaseBookFromStore em duas condições separadas, como a seguir:

se user.walletBalance Agora, se o saldo da carteira do usuário for insuficiente, nossa condição será assim:

if user.walletBalance Se houver menos livros na loja em comparação com quantos o usuário deseja comprar, nossa condição se parece com esta:

if book.qtyLeft <=0 {throw PurchaseError.InsufficentBookQty}

Finalmente, podemos agora detectar os erros individuais como:

do {try purchaseBookFromStore (usuário: usuário1, livro: storeItem)} catch PurchaseError.InsufficentWalletBalance {print (“Você não tem fundos suficientes para realizar esta transação”)} catch PurchaseError.InsufficentBookQty {print (“Insufficent item Quantity”)} catch {print (“Algo deu errado”)}

O último bloco catch atua como um bloco catch padrão ao lançar um erro indefinido.

Conclusão

O tratamento de erros e a exibição de erros personalizados são essenciais para qualquer aplicação bem-sucedida. Definindo erros e utilizando o recurso do-catch no Swift, podemos entender por que eles ocorrem e resolver problemas mais rapidamente. Você pode obter o código-fonte completo para este projeto no GitHub .