Ios Swift 1.2-由类函数的闭包参数引起的错误

Ios Swift 1.2-由类函数的闭包参数引起的错误,ios,swift,closures,Ios,Swift,Closures,自从我升级到Swift 1.2后,我遇到了一个奇怪的问题,我无法解决。以下是导致所有故障的代码: internal class Test<T,U> { internal class func closureFunc(#arg: T, worker: (first: T, second: String) -> U, closure: ((u: U) -> Void)?) -> Void { println("Something") }

自从我升级到Swift 1.2后,我遇到了一个奇怪的问题,我无法解决。以下是导致所有故障的代码:

internal class Test<T,U> {
    internal class func closureFunc(#arg: T, worker: (first: T, second: String) -> U, closure: ((u: U) -> Void)?) -> Void {
        println("Something")
    }
}
Test.closureFunc(arg: "", worker: { (first, second) -> Void in
    //code
    }) { (u) -> Void in
    //code
}
内部类测试{
内部类func closureFunc(#arg:T,worker:(第一个:T,第二个:String)->U,闭包:((U:U)->Void)?)->Void{
println(“某物”)
}
}
Test.closureFunc(参数:“”,辅助程序:{(第一,第二)->中的Void
//代码
}){(u)->在
//代码
}
错误本身表明:

“函数签名(Void)->Void与预期类型(u:Void)->Void不兼容”

我读了所有关于Swift 1.2的书,但似乎仍然找不到合理的解释。我将非常感谢任何提示和建议


PS:我刚刚看到,这与我的类似,但删除闭包中的参数名称对我来说并不太有效

这似乎是Swift 1.2(甚至是Swift 2(Xcode 7 beta 3))中的一个缺陷,它使用带有外部名称的单参数闭包

作为解决方法,您可以删除外部参数名称“u”:

在Swift 2(仅限)中,还有另一种解决方法,您可以为传递的闭包指定一个外部名称(因为这将符合新的和更严格的命名约定):

internal class func closureFunc(#arg: T, worker: (first: T, second: String) -> U, closure: (U -> Void)?) -> Void
Test.closureFunc(arg: "", worker: { (first, second) -> Void in
    //code
    }) { (anyExternalNameWorks u: Void) -> Void in
    //code
}