方法是类,结构体或者枚举内部的函数,本质上是一个东西,但在赋值给var let的时候也还是有区别的
func add(_ a:Int,_ b:Int) -> Int
{
a + b
}
let fn = add
print(fn(2,3)) //5
print(fn(3,5)) //8
struct Person
{
var a:Int
func go()
{
print("go\(a)")
}
}
let fn1 = Person.go
let fn2 = fn1(Person(a: 10)) //go 10
这没啥问题,函数在swift就是可以赋值的,原理也简单,函数是代码段的一个复杂的数据,这个数据存着函数的计算方式,任何能访问该地址的变量能调用,只要在语法分析处理好就行了
普通函数来说,把这个地址赋值给后面就好了,但方法不是
fn1也是个函数,但这个函数是传入一个Person返回一个()->()的函数
所以fn1执行了之后才返回fn2
这里的fn2才是正常可用的函数,原因很简单,里面可能有调用Person的成员存储属性,Person如果没初始化,成员存储属性也没初始化,不就调了个寂寞?