两个方法调用之间的区别
Difference between two method calls
给定以下定义:
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
下面两次调用 retrieveData 有什么区别?
第一次通话:
let id: Int = 1
retrieveData(id: id) {
self.update(with: [=11=])
}
第二次通话:
let id: Int = 1
retrieveData(id: id, completion: {
self.update(with: [=12=])
})
方法中,
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
completion
是一个 尾随闭包 。它是 方法的最终参数 。因此,在 Swift 中,我们可以在调用方法时省略在列表中写入 参数标签 ,即
retrieveData(for: id) {
//your code..
}
你也可以这样称呼它,
retrieveData(for: id, completion: {
//your code..
})
因此,它可以通过两种方式调用。你的选择。虽然第一个更干净,推荐使用。阅读更多相关信息 here。
除了接受的答案-
在Swift中,函数首先是class对象,这意味着它们可以作为参数传递。
在您的示例中,当有一个函数将另一个函数作为参数时,您可以使用尾随闭包语法将参数内联写入:
let id: Int = 1
retrieveData(id: id) {
self.update(with: [=10=])
}
但是看看函数update(with:)
它是一个接受Record
和returns Void的函数。
另一种写法,而不是在闭包中调用函数,是只传递函数:
let id: Int = 1
retrieveData(id: id, completion: update)
请注意,您没有向它传递参数或烤箱支架。当您以这种方式传递函数时,您传递的是函数本身,而不是计算函数的结果。
我认为这在调用站点更干净。
给定以下定义:
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
下面两次调用 retrieveData 有什么区别?
第一次通话:
let id: Int = 1
retrieveData(id: id) {
self.update(with: [=11=])
}
第二次通话:
let id: Int = 1
retrieveData(id: id, completion: {
self.update(with: [=12=])
})
方法中,
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
completion
是一个 尾随闭包 。它是 方法的最终参数 。因此,在 Swift 中,我们可以在调用方法时省略在列表中写入 参数标签 ,即
retrieveData(for: id) {
//your code..
}
你也可以这样称呼它,
retrieveData(for: id, completion: {
//your code..
})
因此,它可以通过两种方式调用。你的选择。虽然第一个更干净,推荐使用。阅读更多相关信息 here。
除了接受的答案-
在Swift中,函数首先是class对象,这意味着它们可以作为参数传递。
在您的示例中,当有一个函数将另一个函数作为参数时,您可以使用尾随闭包语法将参数内联写入:
let id: Int = 1
retrieveData(id: id) {
self.update(with: [=10=])
}
但是看看函数update(with:)
它是一个接受Record
和returns Void的函数。
另一种写法,而不是在闭包中调用函数,是只传递函数:
let id: Int = 1
retrieveData(id: id, completion: update)
请注意,您没有向它传递参数或烤箱支架。当您以这种方式传递函数时,您传递的是函数本身,而不是计算函数的结果。
我认为这在调用站点更干净。