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


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

var someVar = 5
final var someFinalVar = 5

let someLet = 5
final let someFinalLet = 5

2336
2018-03-05 19:20


起源



答案:


final 修饰语在中描述 Swift语言参考,说

最后

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

这意味着没有 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}

14
2018-03-05 19:42





最终变量不能在子类中重写。它还向编译器提示,允许它内联变量。换句话说,每次编译器看到某个地方使用的最终变量时,它都可以立即替换该值。编译器是否实际执行此操作取决于编译器及其知道/使用的任何优化。


2
2018-03-05 19:42