为什么Swift自动删除最后一个闭包参数名?

为什么Swift自动删除最后一个闭包参数名?,swift,Swift,例如: private func test1(closure1: () -> Void, closure2: () -> Void) { } 调用时: self.test1(closure1: { }) { } self.test2(closure1: { }, closure2: { }) { } 已删除closure2。 此外: 调用时: self.test1(closure1: { }) { } self.test2(closure1: { }, c

例如:

private func test1(closure1: () -> Void, closure2: () -> Void) {

}
调用时:

self.test1(closure1: {

}) {

}
self.test2(closure1: {

}, closure2: {

}) {

}
已删除
closure2


此外:

调用时:

self.test1(closure1: {

}) {

}
self.test2(closure1: {

}, closure2: {

}) {

}
已删除
closure3


我不明白苹果为什么会这样设计


这会使代码不那么清晰。

这只是业界的一种惯例——在函数中显示最后一个闭包。它除了语法糖分之外什么都没有,但是值得一提的是,您可以用任何一种方式编写它,我个人发现,当一个方法有多个闭包参数时,区分闭包是很有用的:

self.test1(closure1: {
    ...
}, closure2: {
    ...
})

这只是业界的一种惯例——在函数中显示最后一个闭包。它除了语法糖分之外什么都没有,但是值得一提的是,您可以用任何一种方式编写它,我个人发现,当一个方法有多个闭包参数时,区分闭包是很有用的:

self.test1(closure1: {
    ...
}, closure2: {
    ...
})
Swift 5.2及以下版本 这是一个约定,看起来像是在实现一个函数(或对象!):

如您所见,调用函数与实现函数类似

(名称),(属性),(行为)

更多信息


Swift 5.3 自Swift 5.3起,标签包括:

Button("Press me") 
action: { /* Do this block */ }
因此,您也可以有多个尾随闭包:

Button {
    /* Do this block */
}

label: {
    Image(systemName: "gear") // Custom button
}
Swift 5.2及以下版本 这是一个约定,看起来像是在实现一个函数(或对象!):

如您所见,调用函数与实现函数类似

(名称),(属性),(行为)

更多信息


Swift 5.3 自Swift 5.3起,标签包括:

Button("Press me") 
action: { /* Do this block */ }
因此,您也可以有多个尾随闭包:

Button {
    /* Do this block */
}

label: {
    Image(systemName: "gear") // Custom button
}
请阅读语言指南中的章节请阅读语言指南中的章节