首先,谢谢你的伟大的书,Swift Apprentice。

在Swift Apprentice第5版中,我读过以下句子:

“在SWIFT中,一个结构的实例是一个不可变的值,而一个类的实例是一个可变的对象。” (第311页)

“如前所述,类的实例是可变的物体,而结构的实例是不可变的值。” (第320页)

“如果您用STRACH尝试了此功能,您会使用编译器错误卷绕,因为结构是不可变的。记住,当您更改结构的值时,您正在进行一个新值。关键字突变标记方法将当前值替换为新的。使用类,不使用此关键字,因为实例本身是可变的。“第322页

我不能完全理解“结构是不可变的价值观”的概念。当我们将结构声明为变量时,当我们将结构的属性声明为变量时,我们是否无法使该结构的实例变异?那么,STRACT实例如何是一个“不可变价值”?

struct Car {
    var color: String
}

var myCar = Car(color: "Red")

myCar.color // Red
myCar.color = "Green"
myCar.color // Green

In the code above, is not myCar instance of the Car struct mutable?

And when we declare a mutating method in the struct, we can again change the Struct instance. Isn’t it mutable in that case?

“记住,当您更改结构的值时,而不是修改值,您正在进行新值。”

据我所知,“价值”意味着这里的结构实例。创建结构实例时,我们创建“值”(不是引用)。我的猜测是,当我们改变那个实例时,我们在幕后创建另一个“实例”或“值”,我对吗?你能以初学者更容易理解的方式传达这句话吗?

我希望你能为我澄清这些,也许在本书的另外版本中,如果您认为一些澄清可能对一些读者有用。

谢谢!

@ertugrul. 非常感谢您的问题! (顺便说一句话!)

结构是值类型。这意味着什么,如果它在像函数的特定范围内使用,对该实例的任何更改仅在该特定实例上影响。如果您然后在应用程序中的另一个位置使用该结构的实例,则新位置中的实例与原始位置中使用的实例不同,而是副本。

例如:

您的计算机上有文本文档。然后,您继续更改本文档。然后,您决定将此文档发送给朋友。如果此文档是一个结构,那么您的朋友获取原始文档的副本。这意味着您的朋友不会看到您所做的更改,也不会看到他们所做的更改。

如果您的文档是一个类,那么将其视为Google Doc。如果您决定访问您的朋友,那么这意味着您所做的任何更改,您的朋友都会看到它,并且您的朋友的任何更改都会让您看看。 :least_smile:

我希望这是有道理的!

一切顺利。

这一主题在166天后自动关闭。不再允许新的回复。