Advanced Pattern Matching

Language Support

Patterns with other Keywords

The Swift documentation points out, that not all patterns can be used with the if, for or the guard statement. However, the docs seem to be outdated. All 7 patterns work for all three keywords.

As a shorter example, see the Value Binding, Tuple, and Type Casting pattern used for all three keywords in one example:

// This is just a collection of keywords that compiles. This code makes no sense
func valueTupleType(a: (Int, Any)) -> Bool {
    // guard case Example
    guard case let (x, _ as String) = a else { return false}

    // for case example
    for case let (a, _ as String) in [a] {

    // if case example
    if case let (x, _ as String) = a {
       print("if", x)

    // switch case example
    switch a {
    case let (a, _ as String):
        return true
    default: return false

With this in mind, we will have a short look at each of those keywords in detail.