¿Cómo detectar ese parámetro es una tupla de dos tipos arbitrarios?

Lo que realmente estoy haciendo es más complejo, pero se trata de poder implementar la función para detectar que algo es una tupla, independientemente de cuáles son los tipos de sus elementos.

Este es mi enfoque que no funciona (ver comentario en la última línea):

func isTuple(b: Any) -> Bool {
    return b is (Any, Any)
}

let myString = "aa"
let myDouble = 1.2
isTuple((myString, myDouble)) //returns false

¿Por qué no funciona? No debeAny actuar como un "comodín" en tuplas también? ¿Es un error conocido de Swift (si no, debería considerarlo e informar)? ¿Hay otra manera de hacerisTupple método de trabajo?

EDITAR

La respuesta de @ NateCook Responde completamente la pregunta original, pero ¿no me ayuda a hacer lo que estoy tratando de hacer? Eso es todo:

No solo necesito determinar que algo es una tupla, sino también dividirlo en sus 2 valores sin conocer el tipo exacto de esos valores.

Aquí está el código:

func processIfTuple(b: Any) {
    if reflect(b).disposition == MirrorDisposition.Tuple {
        let (first, second) = b as (Any, Any) //error when casting
        process(first)
        process(second)
    }
}

func process(value: Any) {
    ...
}

processIfTuple(("aa", 1.2))

Esto no funciona por una razón similar que la pruebab is (Any, Any) No funciona. Esta vez hay un error al intentar lanzar. ¿Se puede resolver esto? Si no, ¿debería considerarse un error de idioma o una característica faltante y reportarse? Definitivamente conduce a MUCHA duplicación de código porque necesito probar todos los pares de tipos posibles para una tupla.

Respuestas a la pregunta(2)

Su respuesta a la pregunta