swift中一些关于方法的知识点

  1. 每一个类的实例都隐含一个叫做 self的属性,它完完全全与实例本身相等。你可以使用 self属性来在当前实例当中调用它自身的方法(在实例属性的方法里使用self )。

实际上,你不需要经常在代码中写 self。如果你没有显式地写出 self,Swift会在你于方法中使用已知属性或者方法的时候假定你是调用了当前实例中的属性或者方法。

  1. 结构体和枚举是值类型。默认情况下,值类型属性不能被自身的实例方法修改。但如果需要在特定的方法中修改结构体或者枚举的属性,你可以选择将这个方法异变(即在方法前加上mutating)
    示例:
struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}

注意,如同 常量结构体实例的存储属性 里描述的那样,你不能在常量结构体类型里调用异变方法,因为自身属性不能被改变,就算它们是变量属性:

let fixedPoint = Point(x: 3.0, y: 3.0)
fixedPoint.moveBy(x: 2.0, y: 3.0)
// this will report an error
  1. 异变方法可以指定整个实例给隐含的 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)
    }
}
  1. 可以通过在 func关键字之前使用 static关键字来明确一个类型方法。类同样可以使用 class关键字来允许子类重写父类对类型方法的实现。

在类型方法的函数体中,隐含的 self属性指向了类本身而不是这个类的实例。

示例:

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
    static func anotherTypeMethod() {
        // type method implementation goes here
    }
}

SomeClass.someTypeMethod()

猜你喜欢

转载自blog.csdn.net/soviet1941/article/details/86506693
今日推荐