带花括号和圆括号的块如何工作?

时间:2016-09-21 09:44:29

标签: swift

"dayOfWeek"

是这个变量还是函数,它为什么会返回值?我们为什么称呼它?没有let loginRegisterButton:UIButton = { let button = UIButton(type: .system) button.backgroundColor = .white button.setTitle("Register", for: .normal) button.translatesAutoresizingMaskIntoConstraints = false button.setTitleColor(.white, for: .normal) return button }() 它不起作用,为什么?

1 个答案:

答案 0 :(得分:12)

这是在同一地点创建并使用的闭包。当您无法将所有内容放在单个表达式中时,可以将其用于初始化。创建只读(let而不是var)字段时,此功能非常有用。

在上面的例子中,代码创建一个按钮,然后在返回结果之前对其执行其他配置。这是将代码从init移动到初始化位置附近的代码块中的好方法。

可视化正在发生的事情的一种方法是想一个做同样事情的命名函数:

func makeWhiteButton() -> UIButton {
    let button = UIButton(type: .system)
    button.backgroundColor = UIColor.White
    button.setTitle("Register", for: .normal)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitleColor(.white, for: .normal)
    return button
}

现在您可以在初始化程序中使用它

let loginRegisterButton:UIButton = makeWhiteButton()

您帖子中的代码与匿名"关闭"做同样的事情。功能。闭包块之后的括号与上面makeWhiteButton之后的括号相同。