0
点赞
收藏
分享

微信扫一扫

swift 在实例方法中修改属性 mutating


结构体和枚举是值类型,默认情况下。值类型不能被自身的实例方法修改。

你可以在选在在func关键字前放一个mutating关键字来指定可以修改属性

//: A UIKit based Playground for presenting user interface

import UIKit


struct Point{
var x = 0.0,y = 0.0
mutating func moveBy(x deltaX:Double,y deltaY:Double){
x+=deltaX
y+=deltaY
}
}

var somePoint = Point(x:1.0,y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x),\(somePoint.y))")

The point is now at (3.0,4.0)

在mutating方法中赋值给self

mutating方法可以指定整个实例给隐含的self属性

 

//: A UIKit based Playground for presenting user interface

import UIKit


struct Point{
var x = 0.0,y = 0.0
mutating func moveBy(x deltaX:Double,y deltaY:Double){
self = Point(x:x+deltaX,y:y+deltaY)
}
}

var somePoint = Point(x:1.0,y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)

print("The point is now at (\(somePoint.x),\(somePoint.y))")

结果同上

枚举的mutating方法

枚举的异变方法可以设置隐含的self属性为相同枚举里的不同成员

//: A UIKit based Playground for presenting user interface

import UIKit


enum TriStaeSwitch{
case off,low,high
mutating func next(){
switch self {
case .off:
self = .low
case .low:
self = .high
case .high:
self = .off
}
}
}


var ovenLight = TriStaeSwitch.low

ovenLight.next()
ovenLight.next()
ovenLight.next()

举报

相关推荐

0 条评论