是否突破外部循环仍然适用于Swift 2?

时间:2015-12-30 04:47:04

标签: swift loops swift2 outer-join

我正在阅读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

1 个答案:

答案 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一起盯着。

在休息时,整个循环将被破坏。

希望你能从中获得帮助。