Почему я получаю сообщение об ошибке «Переменная используется перед инициализацией» в строке, в которой я инициализирую переменную в Swift?

Я изо всех сил пытаюсь понять, почему я получаю эту ошибку компилятора в проекте iOS, использующем Swift. Если я создаю следующий класс:

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

Я получаю сообщение об ошибке компилятора в строкеself.c = self.runCalculation() говоря "переменная" self.c "используется перед инициализацией".

Сначала я думал, что это потому, что компилятор не может проверить, чтоrunCalculation() метод не имеет доступаself.c, но затем я попытался немного смешать метод init:

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

и на этот раз ошибка «Переменная« self.b »используется перед инициализацией» (на том жеself.runCalculation() линия). Это указывает на то, что компиляторявляется способный проверять, к каким свойствам обращается метод, и, насколько я могу судить, не должен иметь проблем с исходным регистром.

Конечно, это тривиальный пример, и я мог бы легко изменить рефакторинг, чтобы не вызывать метод расчета, но в реальном проекте может быть несколько вычислений, каждый из которых может быть довольно сложным. Я хотел бы иметь возможность отделить логику, чтобы все было читабельно.

К счастью, есть простой обходной путь:

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

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

(или используя инициализатор свойстваlet c = 0) но я бы хотел понять, почему у компилятора возникла проблема с первым примером. Я что-то упустил или это ненужное ограничение?