如果我需要在 Swift 中的开关内调用 break,我该如何停止 for each 循环迭代?
How can I stop a for each loop iteration if I need to call break inside a switch in Swift?
每个循环如何停止?在 return 错误消息下一个循环不应 运行,停止 for each 循环。因此,它将按顺序处理显示的错误:
if let fields = data.keys ?? [] {
for each in fields {
switch each.key {
case One:
let errorOne = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorOne.count > 0 {
// Stop For Each
}
case Two:
let errorTwo = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorTwo.count > 0 {
// Stop For Each
}
case Three:
let errorThree = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorThree.count > 0 {
// Stop For Each
}
default: break
}
}
}
func errorValidation(id: String, name: String, keyValue: String) -> String {
var errorMessage = String()
switch keyValue {
case One:
if name.isEmpty {
errorMessage = "One Is Empty"
}
case Two:
if name.isEmpty {
errorMessage = "Two Is Empty"
}
case Three:
if name.isEmpty {
errorMessage = "Three Is Empty"
}
default: break
}
return errorMessage
printVMSLog("Error \(errorMessage)") // Always Print Three IS Empty
}
您要找的是labeled statements。你可以命名你的循环,然后你可以指定你想打破哪个循环:
if let fields = data.keys ?? []{
fieldsLoop: for each in fields {
switch each.key {
case One:
let errorOne = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorOne.count > 0 {
break fieldsLoop
}
case Two:
let errorTwo = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorTwo.count > 0 {
break fieldsLoop
}
case Three:
let errorThree = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorThree.count > 0 {
break fieldsLoop
}
default: break
}
}
}
一个解决方案是跳过switch
并执行
if let fields = data.keys ?? [] {
for each in fields {
if [One, Two, Three].contains(each.key) {
let error = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if !error.isEmpty {
break
}
}
}
}
每个循环如何停止?在 return 错误消息下一个循环不应 运行,停止 for each 循环。因此,它将按顺序处理显示的错误:
if let fields = data.keys ?? [] {
for each in fields {
switch each.key {
case One:
let errorOne = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorOne.count > 0 {
// Stop For Each
}
case Two:
let errorTwo = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorTwo.count > 0 {
// Stop For Each
}
case Three:
let errorThree = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorThree.count > 0 {
// Stop For Each
}
default: break
}
}
}
func errorValidation(id: String, name: String, keyValue: String) -> String {
var errorMessage = String()
switch keyValue {
case One:
if name.isEmpty {
errorMessage = "One Is Empty"
}
case Two:
if name.isEmpty {
errorMessage = "Two Is Empty"
}
case Three:
if name.isEmpty {
errorMessage = "Three Is Empty"
}
default: break
}
return errorMessage
printVMSLog("Error \(errorMessage)") // Always Print Three IS Empty
}
您要找的是labeled statements。你可以命名你的循环,然后你可以指定你想打破哪个循环:
if let fields = data.keys ?? []{
fieldsLoop: for each in fields {
switch each.key {
case One:
let errorOne = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorOne.count > 0 {
break fieldsLoop
}
case Two:
let errorTwo = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorTwo.count > 0 {
break fieldsLoop
}
case Three:
let errorThree = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if errorThree.count > 0 {
break fieldsLoop
}
default: break
}
}
}
一个解决方案是跳过switch
并执行
if let fields = data.keys ?? [] {
for each in fields {
if [One, Two, Three].contains(each.key) {
let error = errorValidation(id: each.id,name:each.name, keyValue: each.key)
if !error.isEmpty {
break
}
}
}
}