实例方法
class Counter { var count = 0 func increment() { count++ } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 } } let counter = Counter() // 初始计数值是0 counter.increment() // 计数值现在是1 counter.incrementBy(5) // 计数值现在是6 counter.reset() // 计数值现在是0
方法的局部参数名和外部参数名
class Counter { var count: Int = 0 func incrementBy(amount: Int,numberOfTimes: Int) { count += amount * numberOfTimes } } let counter = Counter() counter.incrementBy(5,numberOfTimes: 3) // counter value is now 15
你不必为第一个参数值再定义一个外部变量名:因为从函数名incrementBy已经能很清楚地看出它的作用。
修改方法的外部参数名
你可以自己添加一个显式的外部名称作为第一个参数的前缀来把这个局部名称当作外部名称使用。
相反,如果你不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线(_)作为该参数的显式外部名称,这样做将覆盖默认行为。
相反,如果你不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线(_)作为该参数的显式外部名称,这样做将覆盖默认行为。
self属性
struct Point { var x = 0.0,y = 0.0 func isToTheRightOfX(x: Double) -> Bool { return self.x > x } } let somePoint = Point(x: 4.0,y: 5.0) if somePoint.isToTheRightOfX(1.0) { print("This point is to the right of the line where x == 1.0") } // 输出 "This point is to the right of the line where x == 1.0"(这个点在x等于1.0这条线的右边)
实例方法中修改值类型
结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择(mutating)这个方法,然后方法就可以从方法内部改变它的属性;
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择(mutating)这个方法,然后方法就可以从方法内部改变它的属性;
struct Point { var x = 0.0,y = 0.0 mutating func moveByX(deltaX: Double,y deltaY: Double) { x += deltaX y += deltaY } } var somePoint = Point(x: 1.0,y: 1.0) somePoint.moveByX(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赋值
struct Point { var x = 0.0,y = 0.0 mutating func moveByX(deltaX: Double,y deltaY: Double) { self = Point(x: x + deltaX,y: y + deltaY) } }
enum TriStateSwitch { case Off,Low,High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off } } } var ovenLight = TriStateSwitch.Low ovenLight.next() // ovenLight 现在等于 .High ovenLight.next() // ovenLight 现在等于 .Off
类型方法
class SomeClass { class func someTypeMethod() { // type method implementation goes here } } SomeClass.someTypeMethod()