在 iOS Swift 中实现方法时如何给闭包命名(语法问题)
How to give a name to a closure when implementing the method in iOS Swift (Syntax Question)
我在下面创建了这两种方法来注销用户。当调用 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) 对这一选择表示遗憾,但此时它已融入语言,现在对此无能为力。
我在下面创建了这两种方法来注销用户。当调用 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) 对这一选择表示遗憾,但此时它已融入语言,现在对此无能为力。