没有catch块的“ do声明”是什么意思?

时间:2018-11-08 15:03:25

标签: swift

在阅读 iOS 12编程时,我遇到了几个带有 do语句 的示例代码,没有 catch块< / em> ,如下所示:

    do {
        let mars = UIImage(named:"Mars")!
        let sz = mars.size

        let r = UIGraphicsImageRenderer(size:CGSize(sz.width*2, sz.height), format:mars.imageRendererFormat)
        self.iv1.image = r.image { _ in
            mars.draw(at:CGPoint(0,0))
            mars.draw(at:CGPoint(sz.width,0))
        }
    }

    // ======

    do {
        let mars = UIImage(named:"Mars")!
        let sz = mars.size

        let r = UIGraphicsImageRenderer(size:CGSize(sz.width*2, sz.height*2), format:mars.imageRendererFormat)
        self.iv2.image = r.image { _ in
            mars.draw(in:CGRect(0,0,sz.width*2,sz.height*2))
            mars.draw(in:CGRect(sz.width/2.0, sz.height/2.0, sz.width, sz.height), blendMode: .multiply, alpha: 1.0)
        }
    }

如果有人能解释 没有catch块的语句 的目的是什么,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

这是新的代码范围:因此,如果要重用变量名,可以使用许多do statements。就像您问题中的代码片段一样,变量marsszr在两个范围中都没有错误。

可能会标记do语句,这使您可以脱离该范围:

scopeLabel: do {
    for i in 0..<10 {
        for j in 0..<20 {
            if i == 2, j == 15 {
                break scopeLabel
            }
            else {
                print(i,j)
            }
        }
    }
}

有关更多详细信息,请查看here

答案 1 :(得分:2)

由于这里没有任何错误,因此使用do so,代码编写者可以复制粘贴相同的内容而无需更改var名称,因为var作用域是do块

我不支持这种方式,他会创建一个函数以避免重复代码,因此它将具有作用域