我正在阅读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
吗?
打破内部和外部循环使差异让我们通过获取一个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
.
在休息时,整个循环将被破坏.
希望你能得到这方面的帮助.