swift中不同类型的闭包语法 - 哪一个是正确的?
问题描述:
我很好奇这些语法陈述中哪一个是(更正确的)。 游乐场愉快地编译这两种情况。swift中不同类型的闭包语法 - 哪一个是正确的?
方法1
// copied from SO and this appears clear to me
UIView.animate(
withDuration: 3.0,
animations: {
},
completion: { (Bool) in
// completion code
}
)
方法2
UIView.animate(
withDuration: 3.0,
animations: {
// code
}) {(Bool) in
// code when finished?
// argument label completion missing?
}
为什么圆的括号内第二方法最后一个参数之前关闭陈述?或者是另一种执行UIView.animation
?
答
这两种方法之间的差异被以下:
方法1:普通闭合
方法2:尾随闭合。 Last函数签名中的闭包参数可以写成较短的语法。如果第二个参数是completion
,并且animations
参数将是最后一个,则尾随闭包将应用于动画等。 因此它必须作为最后(或唯一)闭包参数。
如果你错过了completion
标签,你可以自由地喜欢这类型的:
UIView.animate(withDuration: 3.0, animations: {
}) {(completion: Bool) in
}
对于你的问题结束还有:这是一个功能相同的相同的实现,但不同的语法。
答
两者都是正确的。
这是函数调用中通常的闭包语法。
它代表一个拖尾关闭。
如果你需要一个封闭表达式传递给函数作为 函数的最后一个参数和封盖表现为长,它可以 是它写成一个尾部,而不是封有用。尾随 闭包在函数调用的括号后面写入,尽管它仍然是该函数的参数。当您使用尾随的 闭包语法时,您不会将闭包的参数标签写为 函数调用的一部分。
你可以阅读更多关于关闭尾随从https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
正想这么说,但你说好听。使用尾随闭包的好处是它通常会产生更清晰的代码。 – picciano
好了之后,我再次看了一遍,它看起来对我来说更干净:)谢谢。 – GiorgioE