最终var和非final var之间的快速差异 最终让和非最终让

kam*_*142 15 swift swift2

最终变量和非最终变量之间有什么区别:

var someVar = 5
final var someFinalVar = 5
Run Code Online (Sandbox Code Playgroud)

let someLet = 5
final let someFinalLet = 5
Run Code Online (Sandbox Code Playgroud)

Ray*_*oal 19

final修改在描述斯威夫特语言参考,它说

最后

将此修饰符应用于类或类的属性,方法或下标成员.它应用于一个类,表明该类不能被子类化.它应用于类的属性,方法或下标,以指示不能在任何子类中重写类成员.

这意味着没有final我们可以写:

class A {
    var x: Int {return 5}
}
class B : A {
    override var x: Int {return 3}
}
var b = B()
assert(b.x == 3)
Run Code Online (Sandbox Code Playgroud)

但如果我们final在课堂上使用A

class A {
    final var x: Int {return 5}
}
class B : A {
    // COMPILER ERROR
    override var x: Int {return 3}
}
Run Code Online (Sandbox Code Playgroud)

那么这发生了:

$ 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}
Run Code Online (Sandbox Code Playgroud)