方法
方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。
实例方法
class Counter { var count = 0 // 实现两个简单的方法 func increment() { count += 1 } func incrementBy(amount: Int) { count += amount } } let counter = Counter() counter.increment() print(counter.count) // 打印出:1 counter.incrementBy(5) print(counter.count) // 打印出:5
self属性
平时不需要多使用self属性,但是在某些方法的参数名与某个属性名相同,就需要用到self属性,主要作用就是用来区分属性名
struct Point { var x = 0.0, y = 0.0 func isToTheRightOfX(x: Double) -> Bool { // 当传进的参数(x)和已经声明的属性相吻合的时候 需要用到self属性进行区分 return self.x > x } } let point = Point(x: 5.0, y: 3.0) if point.isToTheRightOfX(1.0) { print("The point is to the right of the line where x == 1.0") }
实例方法修改值类型
结构体和枚举都是值类型,那么使用实例方法对值类型的属性进行修改需要特殊处理,否则无法修改
struct Point { var x = 0.0, y = 0.0 // 如果要修改值类型属性 需要加 "mutating"关键字 mutating func moveByX(deltaX: Double, deltaY:Double){ self.x += deltaX self.y += deltaY // self = Point(x: x + deltaX, y: y + deltaY) 这样写等效 } } var point = Point(x: 5.0, y: 3.0) point.moveByX(8.0, deltaY: 2.0) print(point)
enum StateSwitch { case Off, Low, High mutating func next() { switch self { case .Off: self = .Low case .Low: self = .High case .High: self = .Off } } } var ovenLight = StateSwitch.Off ovenLight.next() // 现在是Low状态 ovenLight.next() // 现在是High状态
类型方法
实例方法是被类型的某个实例调用的方法。你也可以定义类型本身调用的方法,这种方法就叫做类型方法。声明结构体和枚举的类型方法,在方法的func
关键字之前加上关键字static
。类可能会用关键字class
来允许子类重写父类的实现方法。
class SomeClass { class func someFunc() -> SomeClass { return SomeClass() } } // 类型方法可以直接使用类型调用,无需创建实例 let someClass = SomeClass.someFunc() struct SomeStruct { static func someFunc() { } } SomeStruct.someFunc()