Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以将泛型函数指定给变量? func function1(arg:Int)->Int{return arg} func function2(arg:T)->T{return arg} 让f1=function1//没问题 让f2=function2//无法显式专门化泛型函数_Swift - Fatal编程技术网

Swift 是否可以将泛型函数指定给变量? func function1(arg:Int)->Int{return arg} func function2(arg:T)->T{return arg} 让f1=function1//没问题 让f2=function2//无法显式专门化泛型函数

Swift 是否可以将泛型函数指定给变量? func function1(arg:Int)->Int{return arg} func function2(arg:T)->T{return arg} 让f1=function1//没问题 让f2=function2//无法显式专门化泛型函数,swift,Swift,该语言的当前短版本?您可以让Swift通过f2的显式类型注释来推断函数2的专门化: 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 gen

该语言的当前短版本?

您可以让Swift通过
f2
的显式类型注释来推断
函数2
的专门化:

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
或者,使用提供显式类型注释的中间specializer函数

let f2: (Int) -> Int = function2
func specialize1Dmap(f:@escaping(T)->T,as f:T.Type)->(T)->T{return f}
设f2int=specialize1Dmap(函数2,as:Int.self)
让f2str=specialize1Dmap(函数2,as:String.self)

太棒了!如果我向function2传递一个参数,其中需要一个类型为(Int)->Int的参数,那么同样的事情也会发生。谢谢你,@dfri。
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)