Применить этот модификатор к классу или к свойству, методу или члену индекса класса. Он применяется к классу, чтобы указать, что класс can not должен быть подклассом. Он применяется к свойству, методу или индексу класса, чтобы указать, что член класса не может быть переопределен в любом подклассе.
Это означает, что без final мы можем написать:
class A {
var x: Int {return 5}
}
class B : A {
override var x: Int {return 3}
}
var b = B()
assert(b.x == 3)
но если мы используем final в классе A
class A {
final var x: Int {return 5}
}
class B : A {
// COMPILER ERROR
override var x: Int {return 3}
}
то это происходит:
$ 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}
Ответ 2
Конечные переменные не могут быть переопределены в подклассах. Это также указывает на компилятор, который позволяет ему встраивать переменную. Другими словами, каждый раз, когда компилятор видит конечную переменную, которая используется где-то, она может немедленно заменить значение. Независимо от того, действительно ли это компилятор делает это с компилятором и любыми оптимизациями, которые он знает/использует.