Как сделать, если соответствие шаблонов с несколькими случаями?

Я ищу синтаксис для сопоставления шаблонов с несколькими случаями в случае 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) {

}