Ответ 1
Модификатор final
описан в Swift Language Reference, в котором говорится
конечная
Применить этот модификатор к классу или к свойству, методу или члену индекса класса. Он применяется к классу, чтобы указать, что класс 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}