实例方法(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








你可能感兴趣的:(Swift,笔记)