Schnelle Eigenschaft - Getter Ivar

7

Gibt es eine Ivar-Eigenschaft, die wir in einem Swift-Getter verwenden sollten? Mein Code veranlasst den Getter, den Getter aufzurufen, bis das Programm abstürzt:

%Vor%     
Adam Carter 14.09.2014, 00:22
quelle

3 Antworten

17

Swift-Eigenschaften haben nicht das Konzept eines separaten zugrunde liegenden Speichers wie in Objective-C. Stattdessen müssen Sie eine zweite (private) Eigenschaft erstellen und diese als Speicher verwenden:

%Vor%

Wenn Sie nur useDocument() aufrufen möchten, nachdem die Eigenschaft document festgelegt wurde, können Sie die Getter-, Setter- und private-Eigenschaft weglassen und stattdessen einfach willSet oder didSet verwenden.

    
Jack Lawrence 14.09.2014, 00:36
quelle
7

Wenn Sie versuchen, eine benutzerdefinierte Verarbeitung zu erstellen, wenn die Eigenschaft festgelegt ist, müssen Sie kein separates Hintergrunddatenelement definieren und eine berechnete Eigenschaft implementieren: Sie können willSet und didSet verwenden. Eigenschaftenbeobachter , die automatisch vor und nach aufgerufen werden, nachdem die Eigenschaft festgelegt wurde.

In diesem speziellen Fall sollten Sie Ihre Property so implementieren:

%Vor%

Vorgeschlagener Messwert: Objektbeobachter

    
Antonio 14.09.2014 07:39
quelle
2

In Ihrem Code gibt es eine unendliche Rekursionssituation: zum Beispiel ruft self.document im Getter den Getter selbst auf.

Sie müssen explizit einen ivar definieren. Hier ist eine mögliche Lösung:

%Vor%     
Anthony Kong 14.09.2014 00:38
quelle

Tags und Links