4

我想对 lambda 的参数使用默认值,例如:

func lambdaArgumentTest() -> String {
  let lambda = { (optString: String = "") -> String in optString }
  return lambda()
}

但是编译器似乎声明这是不可能的:

Default argument is only permitted for a non-curried function parameter

有什么好的解决方法吗?这在未来的版本中可能吗?

4

2 回答 2

3

即使在 Xcode 6.0.1 中,这似乎也是非常错误的。以下代码在 100% 的情况下使 Playground 崩溃:

func test(_ a: Int = 0) -> Int {
    return 100 + a;
}

let test2 = test

test()   // returns 100
test(21) // returns 121

// test2()  // crashes playground if uncommented

至于您从代码中得到的错误,从外部来看,这似乎是一个任意限制。这可能是由于方法是如何在 Swift 中实现的,但这只是一个猜测。

于 2014-09-19T15:22:37.537 回答
3

我不能说这是否会以您尝试的方式实现,但看起来您可以通过使用嵌套函数来解决该错误。

func lambdaArgumentTest() -> String {
    func lambda(optString: String = "") -> String {
        return optString
    }

    return lambda()
}
于 2014-08-25T14:33:37.083 回答