Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 6 da Aula 5 - Mellhorando o código, usando e recebendo closures

Boa tarde, tive exito em todos os testes exatamente como explicado, até aqui... Com os erros que seguem, procurei por todo o código algum motivo que possa causa-los, alguma coisa que esqueci, ou algum passo que pulei.. Qualquer ajuda será bem vinda, e desculpe se for algum erro ignorante:

1ª Dúvida

No arquivo MealsTableViewController.swift, quando tento definir a constante:

let cell = recognizer.view as UITableViewCell

... não compila, fui obrigado a utilizar ! no as (as!) e tudo correu bem sem crashear na execução. Diz que o UIView? não foi convertido para UITableViewCell. Erro de tipagem? Onde posso verificar e corrigir isso?

2ª Dúvida

No arquivo MealsTableViewController.swift, na constante remove, quando invocamos a atualização da tableView não compila usando apenas 'table' antes do reloadData, diz que o "MealsTableViewController" não tem um membro chamado 'table'.

let remove = UIAlertAction(title: "Remove", style: UIAlertActionStyle.Destructive, handler: { action in self.meals.removeAtIndex(row) self.table.reloadData() })

...quando coloco tableView ele compila e roda normal sem crashear na utilização da função. Posso usar sem problemas tableView?

3ª Dúvida

No arquivo RemoveMealController.swift, quando vou definir a constante:

let details = UIAlertController(title: meal.name, message: meal.details(),

Não compila, diz que 'meal' não tem um membro 'details'.

Qualquer luz será bem vinda, agradeço desde já a ajuda.

3 respostas
solução!

Oi Mauro, vamos lá.

1ª Dúvida

Sim, isto ocorreu devido a mudanças na linguagem. O Swift efetuou algumas alterações e por isso vários códigos quebraram. Agora neste caso você é obrigado a efetuar o cast.

2ª Dúvida

Isso, o nome certo é realmente tableView.

3ª Dúvida

Acredito que faltou criar este método details. Seria algo como:

    func details() -> String {
        return "Name: \(self.name) Happiness: \(self.happiness)"
    }

Estamos atualizando o curso com a versão do Swift 2.0 e em breve estará disponibilizado.

Abraço

Joviane, deu certo! Muito obrigado, estou aguardando a atualização do curso. :)

Também fiquei em dúvida quando vi no vídeo o meal.details() não lembro dele ter feito no vídeo. Mas basicamente ele deve ter encapsulado a lógica que antes ficava no controller para dentro do próprio Meal, tornando o próprio model responsável por dar mais detalhes dos seus itens. O Código correto seria:

    func details() -> String {
        var message = "Happiness: \(self.happiness)"
        for item in self.items {
            message += "\n * \(item.name) - \(item.calories) calories"
        }
        return message
    }