繁体   English   中英

swift中不同类型的闭包语法 - 哪一个是正确的?

[英]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另一个实现?

两者都是正确的。

  1. 它是函数调用中常用的闭包语法。

  2. 它代表一个尾随闭包

如果需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,则将其写为尾随闭包可能很有用。 在函数调用的括号之后写入尾随闭包,即使它仍然是函数的参数。 使用尾随闭包语法时,不要将闭包的参数标签写为函数调用的一部分。

您可以从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM