【问题标题】:What does a "do statement" without catch block mean?没有 catch 块的“do 语句”是什么意思?
【发布时间】:2023-03-31 17:19:01
【问题描述】:

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

    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)
        }
    }

如果有人能解释 do statements without catch blocks 的目的,我将不胜感激。

【问题讨论】:

标签: swift


【解决方案1】:

这是一个新的代码范围:因此,如果您想重用变量名,可以使用多个 do statements。就像您问题中的 sn-p 一样,变量 mars、sz 和 r 在两个范围内都存在且没有错误。

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。

【讨论】:

    【解决方案2】:

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

    我不支持这种方式他会创建一个函数来避免重复代码,所以它会有它的范围

    【讨论】:

    • 非常感谢您的精彩提示。
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2012-05-07
    • 2011-08-15
    • 2023-03-12
    • 2019-10-17
    • 2011-01-18
    相关资源
    最近更新 更多