¿Es posible crear un cierre genérico en Swift?

func myfunc<T>(i:T) -> T { return i } 

¿Es posible cerrar esta function genérica?

 let myfunc = { <T>(i:T) -> T in return i } 

esto no funciona …

No, porque las variables y las expresiones no pueden ser genéricas. Solo hay funciones genéricas y types generics.


Para aclarar: en algunos idiomas puede tener types con un cuantificador universal, como para todo forall a. a -> a forall a. a -> a . Pero en Swift, los types no pueden tener un cuantificador universal. Entonces, las expresiones y los valores no pueden ser generics en sí mismos. Las declaraciones de function y las declaraciones de tipo pueden ser genéricas, pero cuando se utiliza una function genérica o una instancia de un tipo genérico, se selecciona algún tipo (que podría ser un tipo real o una variable de tipo) como argumento de tipo y, a continuación, El valor que obtienes ya no es genérico.