带clousure的Swift泛型函数

带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)

我有以下泛型函数(不是任何类的一部分):

但是编译器(iPad)告诉我“(String)->U不能转换为(T)->U”

自然地,我做了一些调查,认为编译器会自动推断类型


谢谢。

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")