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