问题描述
我在下面创建了这两种方法来注销用户。调用logout2(...)时,用户可以在logout1()运行之前在anyFinalChanges中进行任何更改。
private func logout1() {
Cache.clearCache()
}
func logout2(anyFinalChanges: () -> (),userLoggedOut: () -> ()) {
anyFinalChangesInThisClosure()
logout()
userLoggedOut()
}
.logout2(anyFinalChanges: {
}) { //No Name here.. why is that?
}
解决方法
每当默认情况下,闭包是函数swift中的最后一个参数时,都会忽略参数标签。但是,您可以根据需要添加它:
logout2(anyFinalChanges: {
},userLoggedOut: {
})
,
这在Swift语言中可以说是一个错误。规则是,如果使用尾随闭包语法(将匿名函数放在方法调用的括号之外),则第一个尾随闭包不会获得标签。在您的代码中,只有一个结尾的闭包,因此它是第一个,并且没有标签。
Swift的原始创建者克里斯·拉特纳(Chris Lattner)对这一选择表示遗憾,但目前,它已经融入了该语言,现在对此无能为力。