如何以编程方式填充开关案例值?

Tim*_*m B 1 switch-statement nsarray ios programmatically-created swift

我通过JSON提取了我的case语句允许的系统代码列表.它们以字符串形式显示,如下所示:

let validCodesFromJson:String = "001, 002, 003, 004, 005, 007, 008, 090, 091, 092, 096"
Run Code Online (Sandbox Code Playgroud)

然后我将此字符串转换为一个数组,其中包含以下内容:

let validCodes:NSArray = validCodesFromJson.componentsSeparatedByString(", ")
Run Code Online (Sandbox Code Playgroud)

我需要将这个代码数组放到我的switch语句的第一个例子中.

switch responseArray[selectedResponseTableRow]["code"]! {
        case validCodes:

            successfulPostAnimation()

        case "006":

            showAlertWindow("Alert", message: "Code was 006", buttonText: "OK")

        default:

           showAlertWindow("Alert", message: "Code was not in the list", buttonText: "OK")
        }
Run Code Online (Sandbox Code Playgroud)

如果代码在其使用默认的其他情况下为"006",则switch语句有效.如果我在第一种情况下定义所有代码而不是使用数组,它工作正常.但我需要以编程方式为此项目执行此操作.

Cra*_*tis 6

您可以使用a guard-clause来增加每个特定表达式的复杂性case.例如:

var validCodes = ["001", "002", "003"]

var code = "002"

switch code {
    case let value where (contains(validCodes, value)):
        "Valid code"
    case "006":
        "Bad code"
    default:
        "Default"
}
Run Code Online (Sandbox Code Playgroud)

如果你在操场上跑步,你会看到"Valid code".

如果您对查看这些模式的语法/语法感兴趣,可以使用Swift编程语言:语句

  • 使用Swift 3,我会写出这样的case-condition:`case let value where validCodes.contains(value):` (3认同)