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

时间:2014-10-22 14:29:52

标签: ios swift nsarray switch-statement programmatically-created

我通过JSON提取我的案例陈述的允许系统代码列表。它们以字符串形式显示,如下所示:

let validCodesFromJson:String = "001, 002, 003, 004, 005, 007, 008, 090, 091, 092, 096"

然后我将这个字符串转换为一个带有以下内容的数组:

let validCodes:NSArray = validCodesFromJson.componentsSeparatedByString(", ")

我需要将这个代码数组放到我的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")
        }

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

1 个答案:

答案 0 :(得分:6)

您可以使用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"
}

如果您在游乐场中进行此操作,则会看到"Valid code"

如果您对查看这些模式的语法/语法感兴趣,可以The Swift Programming Language: Statements