¿Por qué aparece el error "Variable utilizada antes de inicializar" en la línea que inicializo la variable en Swift?

Me cuesta entender por qué recibo este error de compilación en un proyecto de iOS usando Swift. Si creo la siguiente clase:

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
    }
}

Me sale un error de compilación en la líneaself.c = self.runCalculation() diciendo "Variable 'self.c' usada antes de ser inicializada".

Al principio pensé que esto se debía a que el compilador no pudo verificar que elrunCalculation() método no accedióself.c, pero luego intenté mezclar un poco el método init:

init () {
    self.a = 3
    self.c = self.runCalculation()
    self.b = 4
}

y esta vez el error es "Variable 'self.b' usada antes de ser inicializada" (en el mismoself.runCalculation() línea). Esto indica que el compiladores capaz de verificar a qué propiedades accede el método, y por lo que puedo ver, no debería haber ningún problema con el caso inicial.

Por supuesto, este es un ejemplo trivial y podría refactorizar fácilmente para evitar llamar al método de cálculo, pero en un proyecto real podría haber varios cálculos, cada uno de los cuales podría estar bastante involucrado. Me gustaría poder separar la lógica para mantener las cosas legibles.

Afortunadamente hay una solución simple:

init () {
    self.a = 3
    self.b = 4

    self.c = 0
    self.c = self.runCalculation()
}

(o usando un inicializador de propiedadeslet c = 0) pero me gustaría entender por qué el compilador tiene un problema con el primer ejemplo. ¿Me estoy perdiendo algo o es una restricción innecesaria?

Respuestas a la pregunta(1)

Su respuesta a la pregunta