修改值类型的实例方法 mutating

修改值类型的实例方法 mutating,第1张

概述修改类型实例方法 结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。 然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何的更改在方法结束时写回原来的结构里。该方法还可以分配一个新的实例到其隐含的self属性,而这个新的实例将取代现有的实例,当该方法结束时。 你可以加入这个行为,通 @H_419_1@修改值类型的实例方法 结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。

然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何的更改在方法结束时写回原来的结构里。该方法还可以分配一个新的实例到其隐含的self属性,而这个新的实例将取代现有的实例,当该方法结束时。
你可以加入这个行为,通过将mutating关键字写在方法的func关键字前:
              struct Point {         var x = 0.0,y = 0.0 mutating func moveByX(deltaX: Double,y deltaY: Double) { x += deltaX y += deltaY }        }        var somePoint = Point(x: 1.0,y: 1.0)        somePoint.moveByX(2.0,y: 3.0)        println("The point is Now at ((somePoint.x),(somePoint.y))")        // prints "The point is Now at (3.0,4.0)"      
上面的Point结构体定义了一个变异的moveByX方法,它通过一定量移动一个Point实例。而不是返回一个新的点,这个方法实际上修改了在其上调用的点。mutating关键字添加到方法的定义上,使它能够修改它的属性。
请注意,你不能使用一个常量的结构类型去调用变异方法,因为它的属性不能被改变。即使它们使可变的属性,如常量结构体实例的存储属性的描述: let fixedPoint = Point(x: 3.0,255)">fixedPoint.moveByX(2.0,255)">// this will report an error 由变异方法分配self 变异方法可以分配一个全新的实例给隐式的self属性。上面所示的Point例子也可以勇下面的方式来替代: mutating func moveByX(deltaX: Double,y deltaY: Double) { self = Point(x: x + deltaX,y: y + deltaY) } } moveByX方法的mutating 版本创建了一个全新的结构体,并将x和y的值设置到目标位置。调用这个版本的方法的最终返回结果和调用之前版本的结果完全一样。
枚举的变异方法可以在同一个枚举里为隐式的self设置不同的值: enum TriStateSwitch { case Off,Low,High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off var ovenlight = TriStateSwitch.Low ovenlight.next() // ovenlight is Now equal to .High // ovenlight is Now equal to .Off 这个例子定义了一个具有三种状态供选择的枚举。每一次它的next方法被调用, 三种不同的电源状态(Off,Low和High)之间循环选择。 总结

以上是内存溢出为你收集整理的修改值类型的实例方法 mutating全部内容,希望文章能够帮你解决修改值类型的实例方法 mutating所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1072055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存