【问题标题】:Swift 1.2 - Error caused by closure parameters of a class functionSwift 1.2 - 由类函数的闭包参数引起的错误
【发布时间】:2015-07-15 12:42:00
【问题描述】:

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

错误本身说:

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

我阅读了有关 Swift 1.2 的所有信息,但我似乎仍然无法为此找到合理的解释。我将非常感谢任何提示和建议。

PS:我刚刚看到this topic,这与我的相似,但删除闭包中的参数名称对我来说并不奏效。

【问题讨论】:

    标签: ios swift closures


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 2019-01-07
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2019-08-09
      • 2016-08-03
      相关资源
      最近更新 更多