解决报错 Swift Extra trailing closure passed in call

10 min read

在 Swift 中,报错 “Extra trailing closure passed in call” 表示在函数调用中传递了多于函数定义的 trailing 闭包。

解决方法之一是检查函数定义,确保它只接受一个尾随闭包参数。如果函数确实只接受一个尾随闭包参数,并且仍然出现此错误,则可能是因为函数调用中有多个尾随闭包参数。

在这种情况下,请使用以下步骤进行解决:

  1. 检查函数定义,确保只有一个尾随闭包参数。
  2. 检查函数调用,确保只在最后一个参数位置传递尾随闭包。这意味着尾随闭包应该是函数调用的最后一个实参,并且不需要将其放在括号内。
  3. 如果在函数定义和函数调用中都没有错误,请考虑重新编译代码并清除任何缓存,以确保不是由编译器或构建系统引起的问题。

下面是一个示例代码,展示了如何正确使用尾随闭包:

func doSomethingWithClosure(param1: Int, closure: () -> Void) {
    // 在这里执行一些操作
}

// 函数调用方式正确
doSomethingWithClosure(param1: 10) {
    print("尾随闭包")
}

// 函数调用方式错误,传递了多个尾随闭包
doSomethingWithClosure(param1: 10) {
    print("尾随闭包1")
} {
    print("尾随闭包2")
}

在正确的函数调用示例中,只有一个尾随闭包作为参数传递给函数。在错误的函数调用示例中,多个尾随闭包被传递给函数,导致出现 “Extra trailing closure passed in call” 的错误信息。