繁体   English   中英

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

[英]Why Swift auto delete last closure parameter name?

例如:

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

}

调用时:

self.test1(closure1: {

}) {

}

closure2已被删除。


还:

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

}

调用时:

self.test2(closure1: {

}, closure2: {

}) {

}

closure3已被删除。


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

它使代码不那么清晰。

这只是行业中的一种惯例 - 将 function 中的最后一个闭包显示为尾随闭包 里面只有语法糖,但值得一提的是,你可以用任何一种方式编写它,我个人发现当方法具有多个闭包 arguments 时区分闭包很有用:

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

Swift 5.2 及以下

这是(曾经)一个约定,读起来就像您正在实现 function(或 object :):

Button("Press me") {
    /* Do this block */
}

如您所见,调用 function 与实现类似。

(名称)、(属性)、(行为)。

更多信息在这里


Swift 5.3

从 Swift 5.3 开始,包括标签:

Button("Press me") 
action: { /* Do this block */ }

所以你也可以有多个尾随闭包:

Button {
    /* Do this block */
}

label: {
    Image(systemName: "gear") // Custom button
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM