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 来打印三重乘法表中的值。
总结
方法使得我们能够在类、枚举和结构体中向实例和类型添加功能以及实现某些功能。可以定义实例方法、类型方法和下标,方法使得你可以实现对封装数据的访问操作。