Как сделать, если соответствие шаблонов с несколькими случаями?
Я ищу синтаксис для сопоставления шаблонов с несколькими случаями в случае if if.
Пример:
enum Gender {
case Male, Female, Transgender
}
let a = Gender.Male
Теперь я хочу проверить, если a.Male OR.Female. Но я бы хотел избежать использования этого переключателя. Однако оператор switch будет выглядеть следующим образом:
switch a {
case .Male, .Female:
// do something
}
Можно ли записать это в случае if?
Я ожидал бы этого, но это не сработало: (
if case .Male, .Female = a {
}
Ответы
Ответ 1
Простой массив делает трюк:
if [.Male, .Female].contains(a) {
print("Male or female")
} else {
print("Transgender")
}
Меня просто поражает способность Swift выводить тип. Здесь получается, что .Male
и .Female
имеют тип gender из a
.
Ответ 2
Для сопоставления шаблонов то, что вы описали, пока не работает. Вы можете сделать это в своем случае. Но если он не может быть преобразован в 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
Вы должны использовать коллекцию. В JavaScript я бы написал что-то вроде этого:
if ([Gender.Male, Gender.Female].includes(actualGender))
console.log(actualGender);
Обратите внимание, что я не знаю, как быстро или как сделать то же самое на этом языке, поэтому вот соответствующий ответ в теме: fooobar.com/info/19780/...: D
EDIT: это версия Swift:
if [.Male, .Female].contains(a) {
}