我正在阅读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)")
}
然而,当我改变时,在操场上:
break outer
代码
break inner
出现同样的结果:
找到78 in [[3, 9, 44], [52, 78, 6], [22, 91, 35]]
是否仍需label loops
突破outer loop
?
答案 0 :(得分:10)
打破内部循环和外部循环会产生差异,我们可以通过一个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
中你会得到:
在[[3,9,44],[52,78,6],[22,91,35]中找到78
更新的数据是[3,9,44,52,78]
在break inner
中,您将获得不同的更新数据:
在[[3,9,44],[52,78,6],[22,91,35]中找到78
更新的数据是[3,9,44,52,78,22,91,35]
因此,你将检查78之后的内部,6没有被添加到更新的数据,因为内部循环只是被打破并再次与下一个ints
一起盯着。
在休息时,整个循环将被破坏。
希望你能从中获得帮助。