是否可以将一个通用函数分配给一个变量?
问题描述:
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)
大中间专用函数的功能!而且,如果我将函数2的参数传递给类型为(Int) - > Int的参数是必需的,那么同样的事情会起作用。谢谢@dfri。 – Verticon