虽然现在iOS的UI大部分可以用Xib和Storyboard来完成,但总有那么个时候,需要我们手动写一些UI代码的。但是写UI代码,会发现定义一个控件就会写许多的代码,比如,设置
frame
,设置textColor
,设置text
等等。这样看上去代码会很啰嗦的感觉。这时候我们可以用局部scope去解决这个问题。
比如我们定义一个label:
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
label.textColor = .black
label.text = "Hello"
定义一个还好,要是多个view的话,看起来就没这么清爽了。在Objective-C中可以直接用一对大括号来区分不同的view,但是在Swift中,这种方法是行不通的,因为这和闭包定义产生了冲突。
1、在Swift中我们可以用闭包来实现Objective-C中的局部scope。
func local(_ closure: () -> ()) {
closure()
}
local {
let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
titleLabel.textColor = .black
titleLabel.text = "Hello"
}
2、我们还可以用do关键字来实现
do {
let textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
textLabel.textColor = .black
textLabel.text = "Hello"
}
3、我比较喜欢的方法还是最后这一种:匿名闭包来实现(看起来有点像Objective-C中的GNU C的声明扩展)
let titleLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
label.textColor = .black
label.text = "Hello"
return label
}()
网友评论