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

虽然现在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
}()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容