我已经在指南中阅读了以下简单说明:
常量的值不需要在编译时就知道,但是您必须为它赋值一次。
但是,我想比这更详细。如果常量引用了一个对象,我是否仍可以修改其属性?如果它引用一个集合,是否可以在其中添加或删除元素?我来自C#背景;它与readonly工作方式类似(除了能够在方法主体中使用它),如果不是,则有什么不同?
readonly
let有点像constC中的指针。如果使用引用对象let,则可以更改对象的属性或调用该对象的方法,但不能为该标识符分配其他对象。
let
const
let对集合和非对象类型也有影响。如果你引用struct了let,你不能改变它的属性或调用它的任何mutating func方法。
struct
mutating func
对集合使用let/ var就像可变/不可变Foundation集合一样:如果将数组分配给let,则不能更改其内容。如果您使用引用字典let,则无法添加/删除键/值对或为键分配新值- 这确实是不可变的。如果要分配数组,字典中的下标,追加或以其他方式对数组或字典进行突变,则必须使用进行声明var。
var
(在Xcode 6 beta 3之前,Swift数组具有值和引用语义的怪异组合,并且在分配给let-时已经变得部分可变了。)