1
resposta

guard let não da o return pra parar a função quando campo "NomeDaRefeicao" não é preenchido

Criei a função Adicionar() exatamente conforme a aula, mas ao fazer o teste pelo emulador, quando eu preencho o Label "Felicidade" mas não coloco nada no label "Nome da Refeição", depois clico no botão Adicionar, o guard let criado na função entende que o campo foi preenchido de alguma pois ele não trava a função. Assim, uma refeição sem nome é adicionada. Fiz um teste para verificar se a variável Nome está vazia e ele retorna um true. Alguém sabe me dizer se isto é um erro ou se deveria mesmo acontecer? O aplicativo não da crash, ele apenas adiciona um espaço vazio como Nome da Refeição.

import UIKit

class ViewController: UIViewController {

@IBOutlet var nomeTF:UITextField?
@IBOutlet var felicidadeTF:UITextField?

@IBAction func Adicionar (){
    guard let nomeDR = nomeTF?.text else {
        return
    }

    guard let felicidadeDR = felicidadeTF?.text, let felicidade = Int(felicidadeDR) else {
        return
    }

    let refeicao = Refeicao(nome: nomeDR, felicidade: felicidade)
    print("Refeição adicionada com sucesso")
    if refeicao.nome.isEmpty {
        refeicao.nome = "Não foi adicionado nome a esta refeição"
    }
    print(refeicao.nome)
1 resposta

A variável é considerada vazia mesmo? porque no iOS vazio é diferente de nil. O guard let verifica se o conteúdo da variável não é nil (nulo), se for vázio, ele considera que tem algo.