我正在阅读 Michael Dippery 于 2015 年出版的 Professional Swift 这本书。在书中的第 25 页,他写道:
“break 和 continue 语句都跳出最内层的循环。但是,您可以标记循环,这样您就可以跳出外层循环”
let data = [[3,9,44],[52,78,6],[22,91,35]]
let searchFor = 78
var foundVal = false
outer: for ints in data {
inner: for val in ints {
if val == searchFor {
foundVal = true
break outer
}
}
}
if foundVal {
print("Found \(searchFor) in \(data)")
} else {
print("Could not find \(searchFor) in \(data)")
}
然而,当我在 Playground 上改变时:
break outer
代码为
break inner
出现同样的结果:
在 [[3, 9, 44], [52, 78, 6], [22, 91, 35]] 中找到 78
是否仍然需要标记循环
来跳出外层循环
?
最佳答案
打破内循环和外循环会有所不同让我们通过使用一个 updatedData
变量再次检查您的代码。
let data = [[3,9,44],[52,78,6],[22,91,35]]
let searchFor = 78
var updatedData = [Int]()
var foundVal = false
outer: for ints in data {
inner: for val in ints {
updatedData.append(val)
if val == searchFor {
foundVal = true
break outer
}
}
}
在 break outer
中你会得到:
Found 78 in [[3, 9, 44], [52, 78, 6], [22, 91, 35]]
updated data is [3, 9, 44, 52, 78]
在break inner
中你会得到不同的更新数据:
Found 78 in [[3, 9, 44], [52, 78, 6], [22, 91, 35]]
updated data is [3, 9, 44, 52, 78, 22, 91, 35]
因此,您将检查在 78 之后的 break inner 中,6 没有添加到更新的数据中,因为内部循环只是被中断并且它再次盯着下一个 ints
。
在 break outer 中,整个循环将被中断。
希望您能从中得到帮助。
关于swift - 中断外部循环是否仍然适用于 Swift 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34523041/