我在以var var:ClassName = {...}()形式初始化属性时我在做什么

时间:2016-09-10 17:26:32

标签: swift initialization

我在视图控制器中有这个

let inputsContainerView: UIView = {
    let view = UIView()
    view.backgroundColor = UIColor.whiteColor()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.layer.cornerRadius  = 5
    view.layer.masksToBounds = true
    return view
}()

我不确定大括号内的初始化是如何工作的。这是速记吗?如果是这样,长形会是什么?

注意,我只想尝试理解这种语法,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

您正在定义一个函数并调用该函数来获取其结果。然后,将结果(view(函数返回的值))指定为变量inputsContainerView的初始值。

我称这个成语为 define-and-call ,它在这种情况下非常有用,即你想要初始化一个变量,但你的初始化程序需要包含几行代码。

答案 1 :(得分:0)

您正在定义一个不带参数的闭包并返回UIView,然后您使用()调用该闭包以返回分配给UIView的{​​{1}} }。

  这是速记吗?如果是这样,长形会是什么?

是的,闭包的完整形式指定了输入和输出。长格式会添加inputsContainerView。 Swift能够推断() -> UIView in中传递的值的输入和输出,以及将结果分配给()常量的事实,这就是为什么你能够将它们关闭的原因。

UIView

您可以阅读有关闭包here.

的更多信息