Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:在lambda中使用默认参数_Lambda_Swift_Xcode6 Beta6 - Fatal编程技术网

Swift:在lambda中使用默认参数

Swift:在lambda中使用默认参数,lambda,swift,xcode6-beta6,Lambda,Swift,Xcode6 Beta6,我希望对lambda的参数使用默认值,例如: func lambdaArgumentTest() -> String { let lambda = { (optString: String = "") -> String in optString } return lambda() } 但编译器似乎表示这是不可能的: Default argument is only permitted for a non-curried function parameter 这有什么好办

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

func lambdaArgumentTest() -> String {
  let lambda = { (optString: String = "") -> String in optString }
  return lambda()
}
但编译器似乎表示这是不可能的:

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

这有什么好办法吗?在未来的版本中,这可能吗?

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

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

    return lambda()
}

即使在Xcode 6.0.1中,这似乎也是一个很大的问题。以下代码在100%的时间内崩溃:

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中的方法是如何在引擎盖下实现的,但这只是一个猜测。

这是我过去的做法,但在新版本beta 6中已不可能了:@db0你能告诉我你到底想做什么,但不是这样吗?我提供的代码在beta 6上运行良好。它不是一个全局函数,而是一个类中的函数,它会得到这个(非常明确的)错误,只是因为beta6:“无法从另一个局部函数引用局部函数”