Swift 中用局部 scope 使代码更易读

2017-08-07  本文已影响26人  TomatosX

虽然现在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
}()
上一篇下一篇

猜你喜欢

热点阅读