Swift 1.2 - class 函数的闭包参数引起的错误

Swift 1.2 - Error caused by closure parameters of a class function

自从我升级到 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
}

错误本身说:

"Function signature (Void) -> Void is not compatible with expected type (u: Void) -> Void".

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

PS:我刚看到 ,这和我的很相似,但是在闭包中删除参数名称对我来说不太管用。

这似乎是 Swift 1.2(甚至 Swift 2 (Xcode 7 beta 3))中的一个错误,带有带有外部名称的单参数闭包。

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

internal class func closureFunc(#arg: T, worker: (first: T, second: String) -> U, closure: (U -> Void)?) -> Void

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

Test.closureFunc(arg: "", worker: { (first, second) -> Void in
    //code
    }) { (anyExternalNameWorks u: Void) -> Void in
    //code
}