swift - 中断外部循环是否仍然适用于 Swift 2?

标签 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)")
}

然而,当我在 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/

相关文章:

objective-c - 对刚刚移植到 Swift 的类的引用显示为前向类对象

php - 在 foreach 循环中正确使用 foreach 循环

ios - NSPredicate swift2 的最长时间

swift - 使 Swift (2.1) 枚举符合 AnyObject

ios - 打开 Swift Playground 书

ios - 如何点击表格 UI 自动化中的特定单元格 (Swift)

python - 使用用户输入在python中循环和求和

javascript - 7 行,包含数组中的值

ios - 调用 viewdidload 图像中的 Swift 2 额外参数错误

swift - 密码恢复/重置