Swift实例方法的本质

Swift中的实例方法

在Swift中,实例方法就是类方法以实例为参数并返回一个可以被实例调用的方法。可以说Swift的实例方法其实是柯里化方法(并不完全等同, 但是思想是一样的)。

首先什么是柯里化函数呢?
其实很简单,就是将一个多参数的函数转换成一个函数调用链,调用链上的函数只有一个参数。

下面举一个例子,两个参数相加:

func add(_ num1: Int, _ num2 :Int) -> Int{
    return num1 + num2
}

add函数的类型为:(Int, Int) -> Int.

柯里化:

func addCurried(_ num1: Int) -> (Int) -> Int {
    return { num2 in
        num1 + num2
    }
}

addCurried函数的类型为:(Int) -> (Int) -> Int

这里我们就将两个参数的函数柯里化成了两个单一参数的函数。

调用addCurried(10)(20),结果等同于add(10, 20)。


大概了解了什么是柯里化以后,我们言归正传来看看在Swift中实例方法是如何被调用的。

我们创建一个Person类:

class Person {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func welcome(to name: String) -> String {
        return "Hi, \(name). Nice to meet you!"
    }
}

然后新建一个实例对象,并调用实例方法welcome(to:) -> String

let person = Person(name: "Bob")
person.welcome(to: "Hebe")
//Hi, Hebe. Nice to meet you!

为什么我们说实例方法在Swift中本质上是类方法呢?
既然是类方法那我们应该就可以用类来调用,试试


1.png

出错是应该的,类方法确实不能直接调用实例方法,既然不能直接调用,我们来看看这个函数总可以吧,要不然证明实例方法是类方法呢。


2.png

注意看右边的类型,和我们之前说的一模一样,实例方法就是类方法以实例为参数并返回一个可以被实例调用的方法

那我们就可以这样来调用:

3.png

成了!

你可能感兴趣的:(Swift实例方法的本质)