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