在Swift中更改Struct中的任何变量时,为什么在函数前面有mutating关键字

让我们来看一个例子:

输出:

屏幕更改为矩形(原点:__lldb_expr_11.Point(x:10,y:0),尺寸:__lldb_expr_11.Size(宽度:10,高度:10))

屏幕更改为矩形(原点:__lldb_expr_11.Point(x:0,y:0),尺寸:__lldb_expr_11.Size(宽度:10,高度:10))

令人惊讶的是,即使我们在结构内部进行了一些更改,didSet处理程序也会被触发。

理解为什么这样做是理解值类型的关键。 从结构上讲,对struct变量进行突变与为其分配新值是相同的。 即使只有较大结构的一个属性被突变,也等同于用新值替换整个结构。

结构是一种值类型 。 换句话说,它应该是不可变的因此,编译器要求您在更改其变量的函数前编写可变的

从实例方法中修改值类型

结构和枚举是类型。 默认情况下,不能从其实例方法中修改值类型的属性。

但是,如果您需要在特定方法中修改结构或枚举的属性,则可以选择对该方法进行行为更改。 然后,该方法可以从方法内部更改(即更改)其属性,并在方法结束时将其所做的任何更改写回到原始结构。 该方法还可以为其隐式的 self 属性 分配一个全新的实例 ,并且该新实例将在方法结束时替换现有实例。

您可以通过将mutating关键字放在该方法的func关键字之前来选择这种行为。

祝贺您,您学习了Swift结构中Muting Keywords基础
快乐编码🎉

感谢您的阅读! 如果您喜欢这篇文章,请鼓掌,以便其他人也可以阅读🙂