Swift switch case使用数组的内容,语法?

Con*_*sed 5 arrays syntax switch-statement swift

来自Apple的Swift Book有一个使用元音作为案例的开关示例.

题. 而不是有这个元音列表,是否可以使用包含此内容的数组?如果是这样,这样做的语法是什么?


〜来自Apple Swift Book~

以下示例从小写字符串中删除所有元音和空格,以创建一个神秘的拼图短语:

let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput.characters {
    switch character {
    case "a", "e", "i", "o", "u", " ":
        continue
    default:
        puzzleOutput.append(character)
    }
}
print(puzzleOutput)
// Prints "grtmndsthnklk"
Run Code Online (Sandbox Code Playgroud)

Cod*_*ent 9

是:

let puzzleInput = "great minds think alike"
var puzzleOutput = ""
let vowels: [Character] = ["a", "e", "i", "o", "u", " "]

for character in puzzleInput.characters {
    switch character {
    case _ where vowels.contains(character):
        continue
    default:
        puzzleOutput.append(character)
    }
}
Run Code Online (Sandbox Code Playgroud)

caseSwift中的匹配依赖于模式匹配operator(~=).如果为它定义新的重载,则可以进一步缩短代码:

func ~=<T: Equatable>(pattern: [T], value: T) -> Bool {
    return pattern.contains(value)
}

for character in puzzleInput.characters {
    switch character {
    case vowels:
        continue
    default:
        puzzleOutput.append(character)
    }
}
Run Code Online (Sandbox Code Playgroud)