Swift 方法


Swift方法

方法是与特定类型相关联的函数。类、结构体和枚举都可以定义实例方法、类型方法和下标。方法为你提供了与实例与类型工作的交互方式。

实例方法

实例方法是属于特定类、结构体或枚举类型实例的函数。它们为这些实例封装了任务和与实例本身的操作。

示例:

class Counter {
    var count = 0
    // 实例方法
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}

let counter = Counter()
counter.increment()
counter.increment(by: 5)
counter.reset()

例子中定义了一个名为 Counter 的类来模拟计数器。类包括了三个实例方法:

  • increment 用来增加计数器 count 的值 1;
  • increment(by: Int) 用来增加计数器 count 的值一个特定的整数;
  • reset 将计数器 count 的值清零。

自增方法可以这样书写:

func increment() {
    self.count += 1
}

类型方法

类型方法与上面提到的实例方法不同,它是与类型本身绑定的方法,而不是类型的实例。它们通常用于执行与类型本身相关的任务。示例:

class SomeClass {
    class func someTypeMethod() {
        // 执行类型方法的代码
    }
}
SomeClass.someTypeMethod()

someTypeMethod 是类型方法。类型方法在方法的 func 关键字之前加上关键字 class 来表示它为类方法。对于结构体和枚举类型来说,则使用关键字 static 来表示类型方法:

struct SomeStructure {
    static func someTypeMethod() {
        // 执行类型方法的代码
    }
}
SomeStructure.someTypeMethod()

enum SomeEnumeration {
    static func someTypeMethod() {
        // 执行类型方法的代码
    }
}
SomeEnumeration.someTypeMethod()

实例方法中修改值类型

当结构体和枚举的实例方法中修改它们自己的,或者它们自己的属性时,必须将这个实例声明为 mutating 的方法。此时,它可以修改它所属的实例属性,而不是不能修改它。示例:

enum TriStateSwitch {
    case off, low, high
    // mutating 实例方法
    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()

例子中定义了一个枚举类型 TriStateSwitch,它的三个可能状态用于表示等同于三态开关。 next 方法切换至下一个可能的状态,并修改该实例,因此需要被标记为 mutating

下标

类、结构体和枚举可以定义下标,它能够作为访问集合、列表或序列的快捷方式。可以使用 subscript 关键字来定义下标,设置和获取方法是必须的。一个类或结构体可以有多个下标,通过不同的索引类型进行重载。下标没有func关键字,但仍然可以指定下标的参数:

struct TimesTable {
    let multiplier: Int
    // 数字乘法表的下标
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("3 的倍数:\(threeTimesTable[6])")

例子中定义了一个命名为 TimesTable 的结构体,代表了传入的整数乘以所需的表。通过将整数值传递给结构体实例的下标来检索表中的值。对于 3 的倍数,查找 6 来打印三重乘法表中的值。

总结

方法使得我们能够在类、枚举和结构体中向实例和类型添加功能以及实现某些功能。可以定义实例方法、类型方法和下标,方法使得你可以实现对封装数据的访问操作。