我正在搜索if语句中与多个case进行模式匹配的语法。 例如:
enum Gender {
case Male, Female, Transgender
}
let a = Gender.Male
现在我想检查,如果是.Male或.Female。但我想避免使用开关。但是switch语句是这样的:
switch a {
case .Male, .Female:
// do something
}
如果是这样的话可以写这个吗? 我希望如此,但它没有用:(
if case .Male, .Female = a {
}
答案 0 :(得分:12)
一个简单的数组可以解决这个问题:
if [.Male, .Female].contains(a) {
print("Male or female")
} else {
print("Transgender")
}
我对Swift推断类型的能力感到惊讶。在此处,.Male
和.Female
属于a
类型的性别。
答案 1 :(得分:1)
如果你有一个关联的值,你可以像这样简单地创建一个 Bool 变量
extension Gender {
var isMaleOrFemale: Bool {
switch self {
case .Male, .Female:
return true
default:
return false
}
}
和用法:
if a.isMaleOrFemale {
// Your code here
}
答案 2 :(得分:0)
对于模式匹配,您描述的内容尚不可用。你可以在你的情况下这样做。但如果它无法转换为hashValue
。那么这也行不通。
// Using Pattern Matching for more than one case.
if case 0...2 = a.hashValue {
print("Hello")
}
//Normal if else
if a == .Male || a == .Female {
print("Hello")
}
答案 3 :(得分:0)
你应该使用一个集合。在JavaScript中我会写这样的东西:
if ([Gender.Male, Gender.Female].includes(actualGender))
console.log(actualGender);
请注意,我对swift没有任何线索,或者在该语言中如何做同样的事情,所以这里有一个相关的答案:https://stackoverflow.com/a/25391725/607033:D
编辑:这是Swift版本:
if [.Male, .Female].contains(a) {
}