1. 程式人生 > >Swift學習筆記十一:方法

Swift學習筆記十一:方法

tro truct b2c 16px 表達 mark 怎樣 代碼閱讀 amount

? ? ?方法是與某些特定類型相關聯的功能/函數在Swift中,結構體和枚舉能夠定義方法;其實這是Swift與C/Objective-C的主要差別之中的一個。

在Objective-C中,類是唯一能定義方法的類型。


1. 實例方法(Instance Methods)
? 1. 基本使用

? ? ? 顧名思義,實例方法就是實例能夠調用的方法。以下讓我們直接上代碼吧

class Counter {
    var count: Int = 0
    func incrementBy(amount: Int, numberOfTimes: Int) {
        count += amount * numberOfTimes
    }
}
let a = Counter()
a.incrementBy(1,numberOfTimes:1)

? ? ? ? ? 重點:
? ? ? ? ? ? ? ?① 方法其實是特殊的函數,全部函數的規則在方法中均適用
? ? ? ? ? ? ? ?② 基於書寫規範,方法的命名盡量要表達出這種方法的作用。以及每一個參數的作用
? ? ? ? ? ? ? ?③ 能夠看到我們調用方法時,第二個參數的名稱寫出來了,這是由於在Swift中,默認情況下。方法的第一個參數是內部參數(方法名中以及能夠明白表明第一個參數的意義),其它參數都是外部參數。調用時,須要寫出參數名稱(這樣能明白的表示出參數的意義,利於代碼閱讀)。

假設不想使用外部參數,能夠將外部參數用”_"取代

class Counter {
    var count: Int = 0
    func incrementBy(amount: Int, _ numberOfTimes: Int) {
        count += amount * numberOfTimes
    }
}
let a = Counter()
a.incrementBy(1,1)

? ?2.在實例方法中改動值類型?
? ? ? ? ??構體和枚舉是值類型。普通情況下。值類型的屬性不能在他的實例方法中被改動。
? ? ? ? ??假設你確實須要在某個詳細的方法中改動結構體或者枚舉的屬性。你能夠選擇變異(mutating)這種方法

struct Student{
    var score = 0
    mutating func incrementScore(a:Int){
        score += a
    }
}

? ? ? ? ? 註意:
? ? ? ? ? ? ? ?① 假設不加mutating?。編譯器會報錯
? ? ? ? ? ? ? ?② 不能在結構體常量實例上調用編譯方法,由於常量的屬性不能被改變

技術分享圖片


2. 類方法(Type Methods)
? ? ? ? ? 類型方法和實例方法一樣用點語法調用。可是。你是在類型上調用這種方法,而不是在實例上調用。以下是怎樣在SomeClass類上調用類型方法的樣例:
? ? ? ? ? 和定義類屬性一樣,結構體中用statickeyword。類中用classkeyword

struct Student{
    var score = 0
    static func print(){
        println("student")
    }
}
class School{
    var name = "NB小學"
    class func print(){
        println("school")
    }
}
Student.print() //輸出:student
School.print()  //輸出:school


Swift學習筆記十一:方法