2016-03-05 13 views

Antwort

13

Der final Modifikator ist in der Swift Language Reference beschrieben, die sagt

final

diesen Schlüssel Nehmen, um eine Klasse oder auf eine Eigenschaft, Methode oder Index Mitglied einer Klasse. Es wird auf eine Klasse angewendet, um anzugeben, dass die Klasse nicht unterklassifiziert werden kann. Es wird auf eine Eigenschaft, eine Methode oder einen Index einer Klasse angewendet, um anzuzeigen, dass ein Klassenmitglied in keiner Unterklasse überschrieben werden kann.

Dies ohne final bedeutet können wir schreiben:

class A { 
    var x: Int {return 5} 
} 
class B : A { 
    override var x: Int {return 3} 
} 
var b = B() 
assert(b.x == 3) 

aber wenn wir final in Klasse A

class A { 
    final var x: Int {return 5} 
} 
class B : A { 
    // COMPILER ERROR 
    override var x: Int {return 3} 
} 

dann verwenden, um dies geschieht:

$ swift final.swift 
final.swift:6:18: error: var overrides a 'final' var 
    override var x: Int {return 3} 
      ^
final.swift:2:15: note: overridden declaration is here 
    final var x: Int {return 5} 
1

Schluss Variablen kann nicht in Unterklassen überschrieben werden. Dies deutet auch auf den Compiler hin, der es erlaubt, die Variable zu inline zu schreiben. Mit anderen Worten, jedes Mal, wenn der Compiler eine letzte Variable irgendwo benutzt sieht, kann er sofort den Wert ersetzen. Ob der Compiler dies tatsächlich tut oder nicht, hängt vom Compiler ab und von den Optimierungen, die er kennt/verwendet.

Verwandte Themen