Expression pattern cannot be a named tuple constant


(Neil Faiman) #1

Swift 2.2 in Xcode 7.3.1.

Apparently you cannot use a named tuple constant as an expression pattern in a case label.

func test(x: Int, y: Int) -> Int {
    let int_1 = 1
    switch x {
    case 0:
        return 0
    case int_1:
        return 1
    default:
        break
    }

    let int_1_1: (Int, Int) = (1, 1)
    switch (x, y) {
    case (0, 0):
        return 0
    case int_1_1: // <<<<
        return 1
    default:
        return -1
    }
}

error: expression pattern of type '(Int, Int)' cannot match values of type '(Int, Int)'
    case int_1_1:
         ^~~~~~~

The error message is particularly amusing.

  - Neil Faiman