11.方法
-
实例方法
//实例方法是属于某个特定类、结构体或者枚举类型实例的⽅法。实例方法提供访问和修改实例 属性的方法或提供与实例目的相关的功能,并以此来支撑实例的功能。实例方法的语法与函数 完全一致。 //self属性:类型的每一个实例都有一个隐含属性叫做 self , self 完全等同于该实例本身。 - 实际上,你不必在你的代码⾥面经常写 self 。不论何时,只要在一个方法中使⽤一个已知的 属性或者方法名称,如果你没有明确地写 self ,Swift 假定你是指当前实例的属性或者⽅法。 - 使⽤这条规则的主要场景是实例方法的某个参数名称与实例的某个属性名称相同的时候。在这种情况下,参数名称享有优先权,并且在引⽤属性时必须使⽤一种更严格的方式。这时你可以使用self属性来区分参数名称和属性名称。 //在实例方法中修改值类型 struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { x += deltaX y += deltaY } } //在可变⽅法中给 self 赋值 struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { self = Point(x: x + deltaX, y: y + deltaY) } } 结构体和枚举是值类型。默认情况下,值类型的属性不能在它的实例方法中被修改。 但是,如果你确实需要在某个特定的方法中修改结构体或者枚举的属性,你可以为这个⽅法选择 可变(mutating) 行为,然后就可以从其⽅法内部改变它的属性;并且这个方法做的任何 改变都会在方法执⾏结束时写回到原始结构中。⽅法还可以给它隐含的 self 属性赋予一个全新的实例,这个新实例在⽅法结束时会替换现存实例。
-
类型方法
//定义在类型本身上调用的⽅法,这种方法 就叫做类型⽅法。在⽅法的 func 关键字之前加上关键字 static ,来指定类型方法。类还可以⽤关键字 class 来指定,从而允许⼦类重写父类该⽅法的实现。 class SomeClass { class func someTypeMethod() { // 在这里实现类型方法 } } SomeClass.someTypeMethod()
12.下标
下标:下标允许你通过在实例名称后⾯的⽅括号中传⼊一个或者多个索引值来对实例进行存取。定义下标使用
subscript 关键字,指定一个或多个输⼊参数和返回类型;与实例⽅法不同的是,下标可以设定为读写或只读。
1.下标语法
subscript(index: Int) -> Int {
get {
// 返回一个适当的 Int 类型的值
}
set(newValue) {
// 执行适当的赋值操作,如果不指定参数,setter 会提供⼀个名为 newValue 的默认参数。
}
}