Fallthrough falls through to the next case, not to the next matching case. The concept is inherited from C switch statements, where each case may be thought of as a goto destination label, and the switch statement brings execution to the first matching one.
In C, the switch statement only dictates where execution starts inside the block. For added convenience, you may use the break statement to skip the rest of the switch body, but nothing forces you to; and if you don't, execution continues normally, like the cases weren't there. For instance:
switch (countdown) { case 3: puts("3..."); case 2: puts("2..."); case 1: puts("1..."); case 0: puts("0!"); }
With no break anywhere, if countdown is 3, then you get the whole thing (even though countdown is obviously 3, and not 2, 1 or 0).
When execution goes from a case to another instead of exiting the switch scope (for instance, with a break statement), you get "fall through" (which is what the Swift fallthrough keyword does).
This is relevant in C as you are allowed to use arbitrarily complex structures inside switch statements, overlapping cases if you want. Here is a legal C program:
switch (x) { case 0: if (y == 3) { case 1: puts("hello"); } else { puts("world"); } case 2: puts("!"); }
This kind of use is however extremely uncommon and often hard to follow (quick! can the else branch be executed if x == 1?). I haven't tested, but I would be very surprised if you could do something similar with Swift.
In general, in C, fall through is considered poor style since it is often hard to tell if the fall through is voluntary or due to a missing break statement. Swift solves this with the fallthrough statement, which makes it explicit that you want execution to continue to the next case inside the switch statement rather than exit the switch scope.
In your case, you cannot use fallthrough to get what you want, because fallthrough is only useful when the execution sequence you need is linear. You need to skip over invalid blocks of code, so you need to use an if-else sequence instead of a switch statement.