带clousure的Swift泛型函数
我有以下泛型函数(不是任何类的一部分): 但是编译器(iPad)告诉我“(String)->U不能转换为(T)->U” 自然地,我做了一些调查,认为编译器会自动推断类型带clousure的Swift泛型函数,swift,generics,Swift,Generics,我有以下泛型函数(不是任何类的一部分): 但是编译器(iPad)告诉我“(String)->U不能转换为(T)->U” 自然地,我做了一些调查,认为编译器会自动推断类型 谢谢。就f:(T)->U的性质而言,正在推断这些类型。问题是在第一个方法中调用f 问问自己:如果T不是弦呢?那么f(“Hello world”)将是非法的。这就是您留给编译器的难题——它拒绝处理它是正确的 以下是法律版本: func execFuncWithGenericParameter<T,U>(f: ((T)
谢谢。就
f:(T)->U
的性质而言,正在推断这些类型。问题是在第一个方法中调用f
问问自己:如果T不是弦呢?那么f(“Hello world”)
将是非法的。这就是您留给编译器的难题——它拒绝处理它是正确的
以下是法律版本:
func execFuncWithGenericParameter<T,U>(f: ((T) -> U), param:T){
f(param)
}
execFuncWithGenericParameter(f: { (p: String) -> Int in
print(p)
return 4711
}, param:"Hello")
func execFuncWithGenericParameter(f:((T)->U),param:T){
f(参数)
}
execFuncWithGenericParameter(f:{(p:String)->中的Int
印刷品(p)
返回4711
},param:“你好”)
现在第一个方法知道
param
将是一个T,所以一切都很好。在第二种方法中,当我们调用第一种方法时,T是字符串,param
是字符串,因此它编译(并运行和打印)。就f:(T)->U
的性质而言,类型是推断出来的。问题是在第一个方法中调用f
问问自己:如果T不是弦呢?那么f(“Hello world”)
将是非法的。这就是您留给编译器的难题——它拒绝处理它是正确的
以下是法律版本:
func execFuncWithGenericParameter<T,U>(f: ((T) -> U), param:T){
f(param)
}
execFuncWithGenericParameter(f: { (p: String) -> Int in
print(p)
return 4711
}, param:"Hello")
func execFuncWithGenericParameter(f:((T)->U),param:T){
f(参数)
}
execFuncWithGenericParameter(f:{(p:String)->中的Int
印刷品(p)
返回4711
},param:“你好”)
现在第一个方法知道param
将是一个T,所以一切都很好。在第二个方法中,当我们调用第一个方法时,T是字符串,param
是字符串,因此它编译(并运行和打印)
func execFuncWithGenericParameter<T,U>(f: ((T) -> U), param:T){
f(param)
}
execFuncWithGenericParameter(f: { (p: String) -> Int in
print(p)
return 4711
}, param:"Hello")