swift 中不同类型的闭包语法——哪一种是正确的?
Posted
技术标签:
【中文标题】swift 中不同类型的闭包语法——哪一种是正确的?【英文标题】:Different types of closure syntax in swift - which one is correct? 【发布时间】:2016-09-22 15:21:13 【问题描述】:我很好奇这些语法语句中哪一个(更)正确。 Playground 愉快地编译了这两种情况。
方法一
// copied from SO and this appears clear to me
UIView.animate(
withDuration: 3.0,
animations:
,
completion: (Bool) in
// completion code
)
方法二
UIView.animate(
withDuration: 3.0,
animations:
// code
) (Bool) in
// code when finished?
// argument label completion missing?
为什么第二种方法中的圆括号在最后一个参数声明之前关闭?还是UIView.animation
的另一种实现方式?
【问题讨论】:
【参考方案1】:这两个都是正确的。
这是函数调用中常用的闭包语法。
它代表一个尾随闭包。
如果您需要将闭包表达式作为 函数的最终参数和闭包表达式很长,它可以 将其写为尾随闭包会很有用。尾随 闭包写在函数调用的括号之后,即使 它仍然是函数的参数。当你使用尾随 闭包语法,你不要将闭包的参数标签写为 函数调用的一部分。
您可以从https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html阅读更多关于尾随闭包的信息
【讨论】:
谢谢,所以我们不应该写arg。尾随闭包内的标签?还是只是不需要? 没有使用尾随闭包编写参数标签的范围。 “完成:”不需要写。尾随闭包的主体写在方法调用方括号之外,即 UIView.animate(...)尾随闭包主体【参考方案2】:这两种方法的区别如下:
方法一: 常规关闭
方法 2: 尾随闭包。
函数签名中的最后一个闭包参数可以用更短的语法编写。如果第二个参数是completion
,animations
是最后一个参数,则尾随闭包将应用于动画等。
所以它必须作为最后一个(或唯一的)闭包参数。
如果您错过了completion
标签,您可以随意输入:
UIView.animate(withDuration: 3.0, animations:
) (completion: Bool) in
也为了完成您的问题:它是相同的实现相同的功能,但不同的语法。
【讨论】:
正要这么说,但你说得很好。使用尾随闭包的优点是它通常会使代码看起来更清晰。 好吧,我又看了一遍,我觉得它看起来也更干净了:)谢谢。以上是关于swift 中不同类型的闭包语法——哪一种是正确的?的主要内容,如果未能解决你的问题,请参考以下文章