Вы правы, что fallthrough
означает "выполнить следующий случай без проверки его истинного значения".
Таким образом, если вы хотите выполнить первый и второй случаи только в ситуации, когда оба являются истинными, вы должны выполнить вторую проверку как часть первого случая. Таким образом, минимальное изменение вашего кода будет:
let number = 1
switch number {
case _ where number > 0:
print("it is greater than zero")
if number < 2 { fallthrough } // <--
case _ where number < 2:
print("it is less than two")
case _ where number < 0:
print("it is less than zero")
default:
print("default")
}
Однако я бы не писал этот конкретный пример. И в любом случае вы все еще сталкиваетесь с проблемой того, что должно произойти, когда число, скажем, равно -1; это меньше, чем 2, но также меньше, чем 0, поэтому вы снова столкнулись с той же проблемой. Из твоего вопроса совсем не очевидно, какая здесь реальная цель! Если это действительно три вещи, которые вы хотите обнаружить, лучше использовать два отдельных теста, поскольку они не связаны друг с другом. Например:
let number = 1
switch number {
case ..<0:
print("it is less than zero")
case 0...:
print("it is zero or greater")
default: break
}
switch number {
case ..<2:
print("it is less than two")
default: break
}