什麼是最終的變量和非最終變量之間的差別:最終變量和非最終變量var |之間的快速差異最後讓和非最終讓
var someVar = 5
final var someFinalVar = 5
和
let someLet = 5
final let someFinalLet = 5
什麼是最終的變量和非最終變量之間的差別:最終變量和非最終變量var |之間的快速差異最後讓和非最終讓
var someVar = 5
final var someFinalVar = 5
和
let someLet = 5
final let someFinalLet = 5
的final
改性劑在Swift Language Reference描述,它說
最終
應用此改性劑的一類或一屬性,方法,或下標a類的成員。它被應用於一個類來表明該類不能被子類化。它應用於類的屬性,方法或下標,以指示類成員不能在任何子類中重寫。
這意味着沒有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}
最終變量不能在子類中重寫。它也向編譯器提出這個問題,它允許它內聯變量。換句話說,每當編譯器看到某個地方使用的最終變量時,它就會立即替換該值。編譯器是否真的這樣做取決於編譯器以及它知道/使用的任何優化。