2015-05-14 11 views
5

Ich habe ähnliche Fragen zu SO gesehen, aber keine hat tatsächlich die Antwort auf diese Frage. „Der Swift Programming Language“ Buch (v. 1.2) sagt:Gespeicherte Eigenschaften für Klassen in Swift

Für Klassen, nur berechnete Typeigenschaften definieren

Und dann auf der nächsten Seite haben sie das folgende Beispiel (ich habe aus Gründen der Kürze von Code befreien):

class SomeClass { 
    static var storedTypeProperty = "Some value." 
    // ... 
} 

Auch der Name der variablen sagt, es ist eine Art Eigenschaft gespeichert ist (nicht ein berechnetes eins).

Update: Sie können gespeicherte Eigenschaften für Klassen definieren, siehe die detaillierte Antwort unten. Es stellte sich heraus, dass das Buch nicht mit den Änderungen in Swift 1.2 für diesen Teil aktualisiert wurde.

Antwort

7

Statisch gespeicherte Eigenschaften in Klassen wurden eingeführt mit Swift 1.2. Die Xcode 6.3 Release Notes Liste unter Swift Language Enhancements (Hervorhebung hinzugefügt):

static“ Methoden und Eigenschaften werden nun in Klassen erlaubt (als alias für class final). Sie dürfen jetzt statische gespeicherte Eigenschaften in Klassen, die globalen Speicher haben und beim ersten Zugriff initialisiert werden (wie globale Variablen).

Das Beispiel

class SomeClass { 
    static var storedTypeProperty = "Some value." 
    // ... 
} 

ist ein Beispiel für eine statische Eigenschaft einer Klasse. Die Aussage

Für Klassen können Sie berechnete Typeigenschaften definieren nur

nicht korrekt ist, ist es noch nicht aktualisiert wurde nach dieser Sprache ändern.

0

Die Dokumentation scheint sowohl mit den Beispielen im Buch als auch mit dem tatsächlichen Code inkonsistent zu sein. Hier ist ein REPL-Beispiel:

1> class Foo { 
    2.  static var _bar = 8 
    3.  static var bar : Int { return _bar } 
    4. } 
    5> Foo.bar 
$R0: Int = 8 
    6> 

Es ist eindeutig eine Typeigenschaft definiert.

+1

Danke, ich verstehe schon alles, was Sie geschrieben haben. Die Frage bezieht sich auf das Zitat aus dem Buch, das eindeutig besagt, dass man keine gespeicherten Typeigenschaften für Klassen definieren kann. Und dann machen sie weiter und definieren es in einer Klasse. Ohne begleitende berechnete Eigenschaft, wie die, die Sie in Ihrer Antwort angegeben haben. –

Verwandte Themen