我阅读一个开源代码的过程中,常常发现有这样的结构:
var textLabel:UILabel = {
let label = UILabel()
label.backgroundColor = .red
return label
}()复制代码
功能能够编译,能够运行,因此语法当然是对的,直接望文生义也知道代码要干啥,只是,这是什么语法?
既然我们关心的是语法结构,那么简化下就是这样样子,对我们要研究的问题并无影响,但是更加简单:
var a = {return 42}复制代码
这样,我们可以打印来验证它是啥?
var a = {return 42}
print(a)//(Function)
print(a())//42复制代码
结果打印出来是
(Function)
42复制代码
这说明{}
就是定义了一个闭包,并且此闭包是没有参数的。虽然,闭包经常用于函数参数,但是直接调用也无不可。加上()
就会指定这个函数。这块函数的定义和调用真是超级灵活,感觉和JavaScript的函数式一样的了。