方法是与特定类型相关联的函数。类、结构和枚举都可以定义实例方法,这些方法封装用于处理给定类型的实例的特定任务和功能。类、结构和枚举还可以定义与类型本身关联的类型方法。类型方法类似于Objective-
C中的类方法。
结构和枚举可以在Swift中定义方法,这是与C
和Objective-C
的主要区别。在Objective-C
中,类是唯一可以定义方法的类型。在Swift
中,您可以选择是定义类、结构还是枚举,并且仍然可以灵活地在创建的类型上定义方法。
-
实例方法 (Instance Methods)
实例方法是属于特定类,结构或枚举的实例的函数。 它们通过提供访问和修改实例属性的方法,或通过提供与实例目的相关的功能来支持这些实例的功能。 实例方法与函数具有完全相同的语法,如函数中所述。
您在其所属类型的开始和结束括号内编写实例方法。 实例方法可以隐式访问该类型的所有其他实例方法和属性。 实例方法只能在它所属类型的特定实例上调用。 没有现有实例,不能单独调用它。
这是一个定义一个简单Counter
类的示例,可用于计算操作发生的次数:
class Counter {
var count = 0
func increment() {
count += 1
}
func increment(by amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
Counter
类定义了三个实例方法:
- increment每次给计数器增加 1;
- increment(by: Int)按照特定的整型数量来增加计数器;
- reset会把计数器重置为零。
Counter
类同样声明了一个变量属性 count
来追踪当前计数器的值。
调用实例方法与属性一样都是用点语法:
let counter = Counter()
// the initial counter value is 0
counter.increment()
// the counter's value is now 1
counter.increment(by: 5)
// the counter's value is now 6
counter.reset()
// the counter's value is now 0
-
self 属性 (The self Property)
每一个类的实例都隐含一个叫做 self
的属性,它完完全全与实例本身相等。你可以使用 self
属性来在当前实例当中调用它自身的方法。
在上边的例子中,increment()
方法可以写成这样:
func increment() {
self.count += 1
}
实际上,你不需要经常在代码中写 self。如果你没有显式地写出 self,Swift会在你于方法中使用已知属性或者方法的时候假定你是调用了当前实例中的属性或者方法。这个假定通过在 Counter的三个实例中使用 count(而不是 self.count)来做了示范。
对于这个规则的一个重要例外就是当一个实例方法的形式参数名与实例中某个属性拥有相同的名字的时候。在这种情况下,形式参数名具有优先权,并且调用属性的时候使用更加严谨的方式就很有必要了。你可以使用 self
属性来区分形式参数名和属性名。
这时, self
就避免了叫做 x
的方法形式参数还是同样叫做x
的实例属性这样的歧义。
struct Point {
var x = 0.0, y = 0.0
func isToTheRightOf(x: Double) -> Bool {
return self.x > x
}
}
let somePoint = Point(x: 4.0, y: 5.0)
if somePoint.isToTheRightOf(x: 1.0) {
print("This point is to the right of the line where x == 1.0")
}
// Prints "This point is to the right of the line where x == 1.0"
除去self
前缀,Swift
将会假定两个 x
都是叫做x
的方法形式参数。
LZ发现了翻译比较全的链接,而且代码上面看着比简书舒服一些,就不再往下继续了
传送门
网友评论