首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >final var和non-final var之间的快速差异| final let和非final let

final var和non-final var之间的快速差异| final let和非final let
EN

Stack Overflow用户
提问于 2016-03-06 03:20:45
回答 2查看 9.7K关注 0票数 16

最终变量和非最终变量之间的区别:

代码语言:javascript
复制
var someVar = 5
final var someFinalVar = 5

代码语言:javascript
复制
let someLet = 5
final let someFinalLet = 5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-06 03:42:28

Swift Language Reference中描述了final修饰符,即

最终

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

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

代码语言:javascript
复制
class A {
    var x: Int {return 5}
}
class B : A {
    override var x: Int {return 3}
}
var b = B()
assert(b.x == 3)

但是如果我们在A类中使用final

代码语言:javascript
复制
class A {
    final var x: Int {return 5}
}
class B : A {
    // COMPILER ERROR
    override var x: Int {return 3}
}

然后就会发生这种情况:

代码语言:javascript
复制
$ 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}
票数 23
EN

Stack Overflow用户

发布于 2016-03-06 03:42:25

最终变量不能在子类中被覆盖。它还向编译器提示这一点,从而允许它内联变量。换言之,每当编译器发现某个地方使用了final变量时,它就可以立即替换该值。编译器是否真正做到这一点取决于编译器和它所知道/使用的任何优化方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35818703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档