Swift: использовать аргументы по умолчанию в лямбде
Я хотел бы использовать значения по умолчанию для аргументов лямбда, таких как:
func lambdaArgumentTest() -> String {
let lambda = { (optString: String = "") -> String in optString }
return lambda()
}
Но компилятор, кажется, утверждает, что это невозможно:
Default argument is only permitted for a non-curried function parameter
Есть ли хорошая работа для этого? Будет ли это возможно в будущих версиях?
2 ответа
Я не могу сказать, будет ли это когда-либо возможным в вашей попытке, но похоже, что вы можете обойти эту ошибку, используя вместо этого вложенную функцию.
func lambdaArgumentTest() -> String {
func lambda(optString: String = "") -> String {
return optString
}
return lambda()
}
Это кажется очень глючным даже в Xcode 6.0.1. Следующий код аварийно завершает работу Playground 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 реализованы методы, но это только предположение.