我有一个查询Firebase实时数据库的代码。
var ref: DatabaseReference!
ref.observe(.childAdded, with: { (snapshot) in
ref.observe(.childChanged) { (snapshot) in
// more code
}
})这里我们可以看到两个闭包的例子。在第一种情况下,所有东西都在observe()内部,在第二种情况下,我们调用observe(),然后使用闭包作为回调函数。
我的问题是:
在第一行中:我们是否将闭包用作参数?关于第二个问题:我们是否将其用作回调函数?
如果是这样,一个完全理解第二种方法,但我不理解第一行,以及为什么我们写这样的闭包。
发布于 2019-09-25 12:47:49
两者都在调用相同的observe方法。Swift有一个名为尾部闭包语法的特性,它允许您删除最后一个参数,如果它是闭包,并让它遵循调用。
因此,对observe的两个调用都将闭包传递为"with",而observe方法将使用像with(snapshotValue)这样的调用来调用该闭包。
请参阅关于闭包的快速文档的尾随闭包部分。
从该文件一开始就引用:
尾随闭包 如果您需要将闭包表达式作为函数的最后参数传递给函数,并且闭包表达式是长的,那么将其写成尾随闭包是很有用的。后面的闭包是在函数调用的括号之后写的,尽管它仍然是函数的一个参数。当您使用尾随闭包语法时,您不会将闭包的参数标签作为函数调用的一部分。
https://stackoverflow.com/questions/58098502
复制相似问题