在 iOS Swift 中实现方法时如何为闭包命名(语法问题)

Jac*_*alf 0 closures ios completionhandler swift

我创建了下面这两种方法来注销用户。当 logout2(...) 被调用时,用户可以在 logout1() 运行之前在 anyFinalChanges 中进行任何更改。

  private func logout1() {
    Cache.clearCache()
  }
  
  func logout2(anyFinalChanges: () -> (), userLoggedOut: () -> ()) {
    anyFinalChangesInThisClosure()
    logout()
    userLoggedOut()
  }
Run Code Online (Sandbox Code Playgroud)

当我实现注销方法时,第二个闭包不显示名称

  .logOut2(anyFinalChanges: {

  }) { //No Name here.. why is that?

  }
Run Code Online (Sandbox Code Playgroud)

我怎样才能使闭包的名称始终出现?

mat*_*att 6

这可以说是 Swift 语言中的一个错误。规则是,如果您使用尾随闭包语法(将匿名函数放在方法调用的括号之外),则第一个尾随闭包不会获得标签。在您的代码中只有一个尾随闭包,因此它是第一个闭包,并且没有标签。

Swift 的原始创建者 Chris Lattner 对这一选择表示遗憾,但此时它已融入到语言中,现在我们无能为力。