我很好奇这些语法陈述中哪一个(更)正确。 游乐场愉快地编写了两个案例。
方法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
的另一种实现?
答案 0 :(得分:6)
两者都是正确的。
这是函数调用中常用的闭包语法。
它代表追踪关闭。
了解有关尾随闭包的更多信息如果需要将闭包表达式传递给函数作为 函数的最终参数和闭包表达式很长,它可以 相反,将它写为尾随闭包很有用。落后 尽管如此,在函数调用的括号之后写入闭包 它仍然是函数的一个参数。当你使用尾随 关闭语法,你不要将闭包的参数标签写为 函数调用的一部分。
答案 1 :(得分:4)
两种方法的区别如下:
方法1: 常规 关闭
方法2: 尾随关闭 。
函数签名中的最后闭包参数可以用较短的语法编写。如果第二个参数是completion
,并且animations
参数将是最后一个,则尾随闭包将应用于动画等。
所以它必须作为最后一个(或唯一的)闭包参数。
如果您错过completion
标签,可以这样输入:
UIView.animate(withDuration: 3.0, animations: {
}) {(completion: Bool) in
}
也是为了完成您的问题:它是相同功能的相同实现,但语法不同。