美文网首页
Swift 中用局部 scope 使代码更易读

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

作者: TomatosX | 来源:发表于2017-08-07 16:46 被阅读26次

    虽然现在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
    }()
    

    相关文章

      网友评论

          本文标题:Swift 中用局部 scope 使代码更易读

          本文链接:https://www.haomeiwen.com/subject/ruealxtx.html