[英]Different types of closure syntax in swift - which one is correct?
我很好奇这些语法语句中哪一个(更)正确。 游乐场愉快地编写了两个案例。
方法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
另一个实现?
两者都是正确的。
它是函数调用中常用的闭包语法。
它代表一个尾随闭包 。
如果需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,则将其写为尾随闭包可能很有用。 在函数调用的括号之后写入尾随闭包,即使它仍然是函数的参数。 使用尾随闭包语法时,不要将闭包的参数标签写为函数调用的一部分。
您可以从https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html了解有关尾随闭包的更多信息。
两种方法的区别如下:
方法1: 定期关闭
方法2: 尾随闭合 。 函数签名中的最后一个闭包参数可以用较短的语法编写。 如果第二个参数是completion
,并且animations
参数将是最后一个,则尾随闭包将应用于动画等。因此它必须作为最后(或唯一)闭包参数。
如果您错过了completion
标签,您可以像这样输入:
UIView.animate(withDuration: 3.0, animations: {
}) {(completion: Bool) in
}
为了完成你的问题:它是相同函数的相同实现 ,但语法不同 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.