實例方法(instance method) 和 類方法(class method)

Swift筆記,OC與Swift中的實例方法(instance method) 和 類方法(class method)的比較

注:本篇文章學習自泊學(boxueio.com)

在OC中:

1. 類方法      

以加號 “+” 開頭,相當於static方法。

被限定在類範圍內,不能被類的實例調用(即脫離實例運行)。alloc就是一種類方法。

2. 實例方法  

以減號 "-“ 開頭。

限定在對象實例的範圍內(即實例化之前不能運行)。init就是一種實例方法,被alloc方法返回的對象實例調用。

NSObject * object1 = [[NSObject alloc] init];

在Swift中:

1. 實例方法

1)實例方法是屬於某個特定類、結構體或者枚舉類型實例的方法。

實例方法是被類型的某個實例調用的方法。實例方法提供訪問和修改實例屬性的方法或提供與實例目的相關的功能,並以此來支撐實例的功能。實例方法的語法與函數完全一致,詳情參見函數。

2)實例方法能夠隱式訪問它所屬類型的所有的其他實例方法和屬性。

實例方法要寫在它所屬的類型的前後大括號之間。實例方法只能被它所屬的類的某個特定實例調用。實例方法不能脫離於現存的實例而被調用。

3)eg:

class BankCard {
    var balance: Double = 0
    
    func deposit(amount: Double)
    {
        self.balance += amount
        print("current balance:\(self.balance)")
    }
}
// instance method
let card = BankCard()
card.deposit(amount: 100)  // fix: card.deposit(100)


2. 類方法(class method) or 類型方法(Type Methods)

1)可以定義類型本身調用的方法,這種方法就叫做類型方法。

① 聲明類的類型方法,在方法的func關鍵字之前加上關鍵字class;
② 聲明結構體和枚舉的類型方法,在方法的func關鍵字之前加上關鍵字static。(tips:結構體和枚舉能夠定義方法,是Swift與C/OC的主要區別之一)

2)Swift中的每一個class method都是instance method,

class method接收一個instance method參數,返回一個和instance method類型一樣的數。

3)直接使用BankCard類調用它的方法deposit:

BankCard.deposit()
此時類型爲:(BankCard) -> (Double) -> ()

這裏可以傳一個實例化類型 如card,並且返回一個closure,與deposit的函數類型一樣。

或者:

let atm = BankCard.deposit // 接收一個BankCard,返回一個closure  class method:直接使用BankCard類調用它的方法deposit
let depositor = atm(card) // 綁定BankCard.deposit的第一個參數,得到了depositor,
depositor(100)
此時,此時 depositor 就是BankCard.deposit 的instance method。

因此,這樣的調用與card.deposit是一樣的

4)本質上 每一個instance method都有一個對應的class method








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章