Obtenga los types arg de la firma del método (espejo / reflexión / introspección?)

Estoy intentando evaluar la firma de una function en time de compilation. Dada una function, me gustaría sacar el Type .

Por ejemplo:

 func f(a: Int, b: Int) -> Int{ return 1 } let y = Mirror(reflecting: f) let types = y.subjectType print(types) 

Vuelvo:

 "(Int, Int) -> Int" 

¡Qué es lo que necesito … en forma de cadena! Los necesito en forma de letra. Uso previsto:

 let unknownA: AnyObject = 1 let unknownA: AnyObject = 2 // The casts (here 'Int') are derived from the mirror above f(a: Int(unknownA), b: Int(unknownB)) 

EDITAR: Ahaha! Después de lo que parece ser un día completo de excavación, encontré esta joya. Publicaré con un ejemplo de trabajo cuando lo tenga funcionando.

No encontré ninguna forma de get el tipo de parameters de la function a través de la reflexión.

"\(y.subjectType)" le proporciona una representación de cadena del tipo de function: (Int, Int) -> Int . Para que pueda analizarlo y get un set de nombres de tipo de argumento ["Int", "Int"] :

 let params = "\(y.subjectType)".componentsSeparatedByString(" -> ")[0] let paramsTypes = params.substringWithRange(Range<String.Index>(start: params.startIndex.successor(), end: params.endIndex.pnetworkingecessor())).componentsSeparatedByString(", ") 

Tampoco encontré forma de get el tipo Swift del nombre de tipo, pero si ha fijado el número de types utilizados en sus funciones, puede crear un dictionary que asigne nombres de tipo a types:

 let typeMap = ["Int": Int.self] 

Entonces puedes llamar a tu function:

 f(typeMap[paramsTypes[0]](unknownA), b: typeMap[paramsTypes[1]](unknownB))