10.4 Swift结构体中的mutating方法

/**

结构体中的mutating方法

值类型(结构体或者枚举)默认方法是不可以修改属性的,也不可以修改self本身

如果要修改需要做特殊处理,函数前加上 mutating

当然在类 class)里面当然是可以修改属性的。

*/

class MyPerson {

var name: String = ""

var age: Int = 0

func set(name: String,age: Int) -> Void {

self.name = name

self.age = age

}

func show() -> Void {

print("name=\(name),age=\(age)")

}

}

var m0 = MyPerson.init()

m0.set(name: "zhangsan",age: 10)

m0.show()

struct MyPerson1 {

var name: String = ""

var age: Int = 0

mutating func set(name: String,age: Int) -> Void {

/**

结构体枚举等值类型的中,这里在普通的实例方法中不允许修改属性

如果一定要修改,在func前面加上 mutating

如果 MyPerson1 class 就没有必要加mutating

*/

self.name = name

self.age = age

}

func show() -> Void {

print("name=\(name),age=\(age)")

}

}


// 这个不可以修改

// let m11 = MyPerson1.init()

// m11.set(name: 1,age: 1)

var m10 = MyPerson1.init()

m10.set(name: "zhangsan",age: 10)

m10.show()

// 枚举里面

enum LightSwitch {

case OFF,LOW,HIGH

// 在枚举中确实可以有成员方法或者实例方法

// 加上 mutating,才可以修改 self

mutating func next() {

switch self {

case .OFF:

self = .LOW

case .LOW:

self = .HIGH

case .HIGH:

self = .OFF


default:

self = .OFF


}

}

}

var light = LightSwitch.OFF

// 调用之后,此时此刻 light == .LOW

light.next()

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...