是否可以将一个通用函数分配给一个变量?

问题描述:

func function1(arg: Int) -> Int { return arg } 

func function2<T>(arg: T) -> T { return arg } 

let f1 = function1 // No problem 

let f2 = function2<Int> // Cannot explicitly specialize a generic function 

当前短语的语言?是否可以将一个通用函数分配给一个变量?

可以让斯威夫特由f2明确类型的注释推断function2专业化:

let f2: (Int) -> Int = function2 

或者使用其提供明确的类型标注

func specialize1Dmap<T>(_ f: @escaping (T) -> T, as _: T.Type) -> (T) -> T { return f } 
let f2int = specialize1Dmap(function2, as: Int.self) 
let f2str = specialize1Dmap(function2, as: String.self) 
+1

大中间专用函数的功能!而且,如果我将函数2的参数传递给类型为(Int) - > Int的参数是必需的,那么同样的事情会起作用。谢谢@dfri。 – Verticon