10.4 Swift结构体中的mutating方法

前端之家收集整理的这篇文章主要介绍了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()

猜你在找的Swift相关文章