"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
}()
它不起作用,为什么?
答案 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
之后的括号相同。