Warum erhalte ich in der Zeile, in der ich die Variable in Swift initialisiere, den Fehler "Variable wird vor der Initialisierung verwendet"?

Ich habe Probleme zu verstehen, warum ich diesen Compilerfehler in einem iOS-Projekt mit Swift erhalte. Wenn ich die folgende Klasse erstelle:

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

Ich erhalte einen Compilerfehler in der Zeileself.c = self.runCalculation() say "Variable 'self.c' wurde vor der Initialisierung verwendet".

uerst dachte ich, das liegt daran, dass der Compiler nicht überprüfen konnte, ob dasrunCalculation() Methode hat nicht auf @ zugegriffself.c, aber dann habe ich versucht, die init-Methode ein wenig zu verwechseln:

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

und dieses Mal lautet der Fehler "Variable 'self.b' wird vor der Initialisierung verwendet" (auf dem gleichenself.runCalculation() Linie). Dies zeigt an, dass der Compiler ist in der Lage zu überprüfen, auf welche Eigenschaften die Methode zugreift, und soweit ich sehen kann, sollte es keine Probleme mit dem ursprünglichen Fall geben.

Natürlich ist dies ein triviales Beispiel und ich könnte leicht überarbeiten, um den Aufruf der Berechnungsmethode zu vermeiden, aber in einem realen Projekt könnte es mehrere Berechnungen geben, von denen jede ziemlich kompliziert sein könnte. Ich möchte in der Lage sein, die Logik zu trennen, um die Lesbarkeit zu gewährleisten.

Zum Glück gibt es eine einfache Problemumgehung:

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

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

(oder Verwenden eines Eigenschaftsinitialisiererslet c = 0) aber ich würde gerne verstehen, warum der Compiler ein Problem mit dem ersten Beispiel hat. Vermisse ich etwas oder ist es eine unnötige Einschränkung?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage