我是新来的斯威夫特编程,和我见过的var和let类型.我知道这let是一个常数,我知道这意味着什么,但我从来没有使用常数,主要是因为我不需要.那么为什么我应该使用var而不是let,在什么情况下我应该使用它?
Ant*_*nio 20
而不是常量和变量,swift中的正确术语是不可变的和可变的.
let当你知道一旦为变量赋值时,你就会使用它,它不会改变 - 即它是不可变的.如果你声明一个表视图单元格的id,很可能它在生命周期内不会改变,所以通过声明它是不可变的,没有你可以错误地改变它的风险 - 编译器会通知你.
典型用例:
#define)还有更多.每次写作var,我都会问自己:这个变量可以改变吗?.如果答案是否定的,我将替换var为let.有时我也使用一种更具保护性的方法:我将所有内容声明为不可变的,然后编译器会在我尝试修改其中一个时让我知道,并且对于每种情况我都可以相应地继续.
一些考虑:
对于引用类型(类),immutable意味着一旦将实例分配给不可变变量,就不能将另一个实例分配给同一个变量.
对于值类型(数字,字符串,数组,字典,结构,枚举),immutable意味着一旦分配了值,就无法更改值本身.对于简单的数据类型(Int,Float,String)它意味着不能分配相同类型的另一个值.对于复合数据类型(结构,数组,字典),这意味着您无法分配新值(例如结构的新实例),并且您无法更改其任何存储的属性.
对于开发人员和阅读代码的人来说,不可变变量也具有语义含义 - 它清楚地表明变量不会改变.
最后,但从纯粹的开发角度来看可能不那么重要,不可变的可以由编译器进行优化.
一般来说,可变状态是尽可能避免.
不可变值有助于推理代码,因为您可以轻松地跟踪它们并清楚地识别从开始到结束的值.
另一方面,可变变量很难跟踪您的数据流,因为任何人都可以随时修改它们.特别是在处理并发应用程序时,对可变状态的推理很快就会成为一项难以置信的艰巨任务.
因此,作为设计原则,尽量使用let,如果需要修改对象,只需生成一个新实例.
每当你需要使用a时var,或许因为使用它会使代码更清晰,尽可能地限制它们的范围而不暴露任何可变状态.举个例子,如果你var在函数内部声明一个函数,只要你没有将这个可变性暴露给调用者就可以这样做,也就是说从调用者的角度来看,无论你是使用了a var还是valin实施.
| 归档时间: |
|
| 查看次数: |
8463 次 |
| 最近记录: |