2016-03-05 14 views

Odpowiedz

13

final modyfikator opisano w Swift Language Reference, który mówi

końcowego

Zastosować tego modyfikatora do klasy lub do właściwości, metody lub członka indeksem z klasy. Jest zastosowany do klasy, aby wskazać, że klasa nie może być poddana podklasie. Jest zastosowany do właściwości, metody lub indeksu dolnego klasy, aby wskazać, że element członkowski klasy nie może zostać nadpisany w żadnej podklasie.

Oznacza to, bez final możemy napisać:

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

ale jeśli używamy final w klasie A

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

wtedy to się dzieje:

$ 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

zmienne końcowe nie mogą być zmienione w podklasach. Wskazuje to również na kompilator, który pozwala mu wstawić zmienną. Innymi słowy za każdym razem, gdy kompilator widzi gdzieś ostatnią zmienną, może natychmiast zastąpić wartość. To, czy kompilator faktycznie to robi, zależy od kompilatora i niezależnie od optymalizacji, które zna/wykorzystuje.

Powiązane problemy