您可以将下面的代码放入 Playgrounds 中。
import UIKit
class MyClass {
func foo(a: String, b: () -> ()) {
b()
}
func bar(a: String = "a", b: () -> ()) {
b()
}
}
let object = MyClass()
object.foo("x") { () -> () in
println("foo")
}
object.bar() { () -> () in
println("foo")
}
object.bar()
调用产生调用中参数“b”缺少参数
问题是:我做错了什么,或者具有默认参数值的方法不支持尾随闭包?
最佳答案
它看起来确实像尾随闭包的问题 - 这段代码有效:
object.bar(b: { () -> () in
println("foo")
})
但是,如果外部名称被删除:
func bar(a: String = "a", _ b: () -> ()) {
b()
}
这不再有效:
object.bar({ () -> () in
println("foo")
})
此外,使用具有字符串作为第二个参数的函数:
func test( val1: String = "a", val2: String) {
}
默认参数已正确分配,因此成功:
test("me")
这是与使用闭包不同的行为。
结论:如果至少有一个具有默认值的参数未指定,则具有默认值参数和尾随闭包的方法或函数将不起作用。为了避免尾随闭包,该函数仅在参数具有外部名称时才起作用。
关于swift - 没有尾随闭包支持具有默认参数值的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27332655/