修改值类型的实例方法 mutating
发布时间:2020-12-14 06:44:00 所属栏目:百科 来源:网络整理
导读:修改值类型的实例方法 结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。 然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何
修改值类型的实例方法结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何的更改在方法结束时写回原来的结构里。该方法还可以分配一个新的实例到其隐含的self属性,而这个新的实例将取代现有的实例,当该方法结束时。 你可以加入这个行为,通过将mutating关键字写在方法的func关键字前:
请注意,你不能使用一个常量的结构类型去调用变异方法,因为它的属性不能被改变。即使它们使可变的属性,如常量结构体实例的存储属性的描述: 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) {
moveByX方法的mutating 版本创建了一个全新的结构体,并将x和y的值设置到目标位置。调用这个版本的方法的最终返回结果和调用之前版本的结果完全一样。枚举的变异方法可以在同一个枚举里为隐式的self设置不同的值: enum TriStateSwitch {
这个例子定义了一个具有三种状态供选择的枚举。每一次它的next方法被调用, 三种不同的电源状态(Off,Low和High)之间循环选择。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |