【发布时间】:2016-02-26 21:06:59
【问题描述】:
我是 Swift 新手,正在尝试学习属性的概念。我从“swift编程语言2.1”中看到了下面的语句和代码。
struct FixedLengthRange {
var firstvalue: Int
let length: Int
}
let rangeOfFourItems = FixedLengthRange(firstvalue: 0, length: 4)
rangeOfFourItems.firstvalue = 8 //error: cannot assign to property: rangeOfFourItems is a "let" constant
并且书中对错误提供了以下解释:
这种行为是由于结构是值类型。当一个实例 值类型的 被标记为常量,它的所有属性也是如此。
对于作为引用类型的类而言,情况并非如此。如果你 将引用类型的实例分配给常量,您仍然可以 更改该实例的变量属性。
为什么值类型的常量实例不能改变其属性,而引用类型的常量实例可以?背后的原因是什么?这本书确实说明了原因,但未能解释原因。我认为了解事物现状背后的原因是一种很好的做法。谁能给我解释一下?
【问题讨论】: