2016-07-08 10 views
0

Zitat aus dem Dokument Swift 3.0 Büros der Chapter: InitializationKonstante Eigenschaft kann während der Initialisierung geändert werden? GEÄNDERT? Was?

Für Klasseninstanzen kann eine konstante Eigenschaft nur von der Klasse während der Initialisierung modifiziert werden, dass sie einführt. Es kann nicht von einer Unterklasse geändert werden.

Zu meinem Verständnis der modifizierte die Aktion nach der Definition beinhaltet, auch bekannt als die Aktion nach erklären und Wert zuweisen, auch bekannt als Re-Werte zuweisen, deshalb habe ich versucht, den folgenden Code ein.

class SurveryQuestion { 
    let text: String 
    var response: String? 
    init(text: String) { 
     self.text = "do you like music?" 
     self.text = text //Got an error here 
    } 
    func ask(){ 
     print(text) 
    } 
} 

Und ich habe einen Fehler in Zeile self.text = text. Der Compiler hat mich gebeten, die Eigenschaft text von konstant auf variabel zu ändern. Ist es nicht gesagt, dass die konstante Eigenschaft durch den Initialisierer der Klasse geändert werden kann, die sie ursprünglich eingeführt hat?

Frage: Verstehe ich das Wort geändert falsch? Ist es die Aktion nach der deklarieren anstelle der Definition, die dazu führen würde, dass die geändert bedeutet, indem Sie einen Wert an die Konstante übergeben.

Antwort

1

Ich denke, dass die Dokumentation nicht klar genug ist. Sie können eine konstante Eigenschaft nur einmal während der Initialisierung festlegen. Sie könnten es auch nicht während der Initialisierung festlegen, wenn der Wert der Eigenschaft inline definiert wurde. Hier ist ein Beispiel.

Der Kompilierzeitfehler //ERROR: Immutable value "self.someProperty" may only be initialized once. erklärt es tatsächlich gut.

+0

Ich stimme Ihnen zu, egal wie, die Konstante kann nur einmal eingestellt werden. Entweder durch Zuweisung eines Standardwerts bei der Definition oder durch einen Initialisierer. Nur dieses ** Modified ** Skript verwirrte mich sehr. – SLN

+0

Die Dokumentation versucht zu betonen, dass nur die Klasse, die die Konstante eingeführt hat, sie und keine Unterklassen setzen kann. In einem anderen Teil der Dokumentation heißt es: "Sobald einer konstanten Eigenschaft ein Wert zugewiesen wurde, kann sie nicht weiter modifiziert werden". Ich denke du hast Recht, dass die Notiz verwirrend sein kann. – itskoBits

+0

Vielen Dank für Ihre Erklärung und Hilfe. – SLN