about 1 year ago

Methods

Methods 其實就是跟特定型別有相關的 functions。

實體 methods

宣告方法與 functions 相同。

class MyClass {
    func myFunc(para: Int) -> Int {
        return para
    }
}
let c = MyClass()
c.myFunc(para:123)

self

每個 instance 都有 self 這個 property,代表這個實體本身。

class MyClass {
    var para = 1
    func myFunc() -> Int {
        return self.para
    }
}

在上述的情況下,不需要特別寫 self,因為 Swift 會假設是 instance 的變數。
但在下述情況,就需要使用 self 來區分。

class MyClass {
    var para = 1
    func myFunc(para: Int) -> Int {
        return self.para + para
    }
}

在實體變數內修改 property

class MyClass {
    var para = 1
    func myFunc() {
        para = 2
    }
}

上述在 class 內可以執行,但因為 struct 跟 enumeration 是 value type,
所以不能夠直接在 method 內修改 property,若要這樣做,必須加上 mutating。

struct MyStruct {
    var para = 1
    mutating func myFunc() {
        para = 2
    }
}

在 method 內指定 self

在 mutating method 內,可以建立新的 instance 並給予 self 來取代原本的 instance。

struct MyStruct {
    mutating func myFunc() {
        self = MyStruct()
    }
}

Methods 類型

Classes 可使用 class,structures 或是 enumerations 可使用 static,透過型別來呼叫而非實體。

class MyClass {
    class func myFunc() {
    }
}
MyClass.myFunc()
struct MyStruct {
    static func myFunc() {
    }
}
MyStruct.myFunc()

Subscripts

在 classes, structures 與 enumerations 中可以定義 subscripts,
目的是透過簡潔的方法去對 collection element 讀取或賦予值。

class MyClass {
    var array = [1,2,3,4]
    subscript(index: Int) -> Int {
        get {
            if index >= array.count {
                return 0
            }
            return array[index]
        }
        set {
            if index >= array.count {
                array.append(newValue)
                return
            }
            array.insert(newValue, at:index)
        }
    }
}
let c = MyClass()
c[3] = 123
print(c[0])
← iOS Swift : Properties iOS Swift : Inheritance →