在iOS Swift中实现方法时,如何给闭包命名语法问题

问题描述

我在下面创建了这两种方法来注销用户调用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)对这一选择表示遗憾,但目前,它已经融入了该语言,现在对此无能为力。