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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |