[英]Is a closure that is passed in as a parameter assigned to the parameter name in 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: {
...
})
这是(曾经)一个约定,读起来就像您正在实现 function(或 object :):
Button("Press me") {
/* Do this block */
}
如您所见,调用 function 与实现类似。
(名称)、(属性)、(行为)。
更多信息在这里
从 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.