在阅读 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块的语句 的目的是什么,我将不胜感激。
答案 0 :(得分:3)
这是新的代码范围:因此,如果要重用变量名,可以使用许多do statements
。就像您问题中的代码片段一样,变量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。
答案 1 :(得分:2)
由于这里没有任何错误,因此使用do so,代码编写者可以复制粘贴相同的内容而无需更改var名称,因为var作用域是do块
我不支持这种方式,他会创建一个函数以避免重复代码,因此它将具有作用域