您可以将下面的代码放入 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()
调用产生Missing argument for parameter 'b' in call
问题是:我做错了什么,或者具有默认参数值的方法不支持尾随闭包?
它看起来确实像尾随闭包的问题 - 这段代码有效:
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")
这是与使用闭包不同的行为。
结论:如果至少有一个具有默认值的参数未指定,则具有默认值参数和尾随闭包的方法或函数将不起作用。为了避免尾随闭包,该函数仅在参数具有外部名称时才起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)