2016-09-21 77 views
6
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 
}() 

是这个变量或函数,它为什么返回值?我们为什么称它?没有parenthesis,这是行不通的,为什么?带有大括号和圆括号的块如何工作?

回答

7

这是一个关闭创建和使用在同一个地方。如果不能将所有内容放在单个表达式中,则可以使用它进行初始化。创建只读(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() 

从代码中使用它你post使用匿名“闭包”功能做同样的事情。关闭块后的括号出现在上面的makeWhiteButton后面的括号中。

+0

谢谢,有道理 – Ninja13

+0

@忍者13欢迎您!如果您不需要进一步的帮助,请点击旁边的灰色复选标记,考虑接受答案。这会让其他人知道你的问题已经解决,并在Stack Overflow上为你赢得新的徽章。 – dasblinkenlight