在官方文档中,通常喜欢在某个概念中加入不必要的花花绕。比如,为了说明函数中返回函数,通常会举个例子,而这个例子同时有某种小算法在里面,能做个加法,取个最大值什么的。这么做最大的作用就是说明作者很牛叉,功底很深厚(小人之心了,不好意思)。但是往往给新手增加了负担,影响理解。我来试图简化这种介绍模式,同时,也试试能不能给自己写明白。
在普通函数中,函数通常需要返回某种值。
举个最简单的例子:
func outFunc1() -> String {
return ("这是一个普通的函数。")
}
print(outFunc1())
>>这是一个普通的函数。
上面这段代码很好理解,我们调用outFunc,加上(),即outFunc(),函数就返回了一串字符,然后将之打印。
然而,更高级一点的用法是,函数也可以返回一个函数。
请看下面的代码。
func outFunc2() -> (() ->String) {
func innerFunc() ->String{
return ("这是一个返回的内部函数。")
}
return innerFunc
}
print(outFunc2()())
>>这是一个返回的内部函数。
outFunc2 与之前的outFunc1结构是一样的,都是返回某种值,不同的是,我在outFunc2中替换了一个innerFunc。返回值的时候,也返回这个innerFunc。这样,我们在调用outFunc2时,就得到了内部函数innerFunc。
解析这里的逻辑。首先,outFunc2(),得到的其实是return出来的innerFunc。想要继续执行这个innerFunc,就再加个(),即outFunc2()()。
总结,基本思想就是将内部的函数看成一个整体。
同样重要的是,要及时意识到,这里的整体是个函数,能完成某种功能。
网友评论