2
respostas

Erro na atribuição de "calories" no método "init".

Ao fazer escrever o método de inicialização da Classe Item, o meu Xcode está retornando um erro(Cannot assign to value: 'calories' is a 'let' constant) na linha que faço a atribuição do valor da variável "calories"(calories = calories;).

Quando usei o self( self.calories = calories;), o erro sumiu. Devo deixar assim, com o self? Por que esse erro não apareceu no vídeo, sendo que o instrutor digitou "calories = calories;"?

2 respostas

Olá Nilson,

Verificando o código da aula a propriedade calories é inicialmente declarada como var e não como let, neste caso no código do instrutor ele não usou o self.

Posteriormente ele muda as propriedades para constantes (let), neste ponto ele insere o self.

O self indica que você está definindo a propriedade do objeto, você pode deixar desta forma, tudo é uma questão de escopo.

No caso do init em classes com atributos não opcionais todos os atributos não opcionais devem ser definidos no init.

A mensagem que você coloca Cannot assign to value: 'calories' is a 'let' constant normalmente ocorre porque o seu calories já possui um valor, neste caso vale a pena dar uma olhada se na declaração dela na classe você já não a instanciou.

Entendi e agradeço a sua explicação, Rafael. Mas acho que se trata de um erro no código descrito na página do curso e também no vídeo.

O seguinte código, que está na página e no vídeo, não compila no meu Xcode.

import Foundation

class Item {
    var name:String
    var calories:Double

    init(name:String, calories:Double) {
        self.name = name
        calories = calories;
    }
}

Quando eu coloco o "self." antes de "calories"(self.calories = calories;), aí o erro desaparece.

O curioso é que no vídeo da aula(05:45), o professor salva o arquivo como descrito na página e o erro não aparece. Não entendi porque o meu Xcode reclama da falta do "self" e o do professor não reclama.