2016-03-05 13 views

risposta

13

Il modificatore final è descritto nel Swift Language Reference, che dice

finale

Applicare questo modificatore ad una classe o ad una proprietà, un metodo o membro pedice di una classe. Viene applicato a una classe per indicare che la classe non può essere sottoclassata. Viene applicato a una proprietà, un metodo o un indice di una classe per indicare che un membro della classe non può essere sovrascritto in alcuna sottoclasse.

Questo significa senza final possiamo scrivere:

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

ma se usiamo final in classe A

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

allora questo accade:

$ 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

variabili finali non possono essere sostituiti nelle sottoclassi. Lo suggerisce anche al compilatore, che gli consente di allineare la variabile. In altre parole ogni volta che il compilatore vede una variabile finale da qualche parte, può immediatamente sostituire il valore. Indipendentemente dal fatto che il compilatore lo faccia, dipende dal compilatore e dalle ottimizzazioni che conosce/utilizza.