Por que recebo o erro "Variável usada antes de ser inicializada" na linha em que inicializo a variável no Swift?
Estou lutando para entender por que estou recebendo esse erro de compilador em um projeto iOS usando o Swift. Se eu criar a seguinte classe:
class InitTest {
let a: Int
let b: Int
let c: Int
init () {
self.a = 3
self.b = 4
self.c = self.runCalculation()
}
func runCalculation () -> Int {
return self.a * self.b
}
}
Eu recebo um erro do compilador na linhaself.c = self.runCalculation()
dizendo "Variável 'self.c' usada antes de ser inicializada".
No começo, pensei que era porque o compilador não podia verificar se orunCalculation()
método não acessouself.c
, mas tentei misturar um pouco o método init:
init () {
self.a = 3
self.c = self.runCalculation()
self.b = 4
}
e desta vez o erro é "Variável 'self.b' usada antes de ser inicializada" (na mesmaself.runCalculation()
linha). Isso indica que o compiladoré capaz de verificar quais propriedades o método acessa e, até onde eu vejo, não deve ter nenhum problema com o caso inicial.
É claro que este é um exemplo trivial e eu poderia refatorar facilmente para evitar chamar o método de cálculo, mas em um projeto real, poderia haver vários cálculos, cada um dos quais poderia estar bastante envolvido. Eu gostaria de poder separar a lógica para manter as coisas legíveis.
Felizmente, há uma solução simples:
init () {
self.a = 3
self.b = 4
self.c = 0
self.c = self.runCalculation()
}
(ou usando um inicializador de propriedadeslet c = 0
), mas gostaria de entender por que o compilador tem um problema com o primeiro exemplo. Estou faltando alguma coisa ou é uma restrição desnecessária?