Swift:在lambda中使用默认参数
我希望对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 这有什么好办
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:“无法从另一个局部函数引用局部函数”