方法
方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 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()
转载于:https://www.cnblogs.com/Alex-sk/p/5503359.html