Swift iOS : 闭包的一个应用

685 阅读1分钟

我阅读一个开源代码的过程中,常常发现有这样的结构:

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的函数式一样的了。