如果我需要在 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
            }
        }
    }
}