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

标签 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")
    }
}
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:刚看到this topic ,这与我的相似,但在闭包中删除参数名称对我来说不太管用。

最佳答案

这似乎是 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

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

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

关于ios - Swift 1.2 - 由类函数的闭包参数引起的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430698/

相关文章:

ios - 如何在没有 CocoaPods 的情况下获取 Google 地方信息的 swift 二进制文件?

iphone - Titanium 的 HTML5(和 JS)真的是原生的吗?

ios - 适用于 iOS 的统一构建 : Not able to change Bundle Identifier

swift - 这是强引用循环还是内存泄漏?

javascript - 如何将 JS 变量的值(不是引用)传递给函数?

c# - 实例方法如何转换为委托(delegate)?

closures - 为什么函数参数的生存期与函数内绑定(bind)的生存期不同?

ios - “NSInvalidArgumentException”,原因 : 'Can' t use nil for keys or values on PFObject. 使用 NSNull 作为值。 (以前的答案不修复它)

ios - 将 UITextField 添加到 UIToolbar 不起作用

ios - 为什么我不能更改嵌套模型中的值?