两个方法调用之间的区别
Posted
技术标签:
【中文标题】两个方法调用之间的区别【英文标题】:Difference between two method calls 【发布时间】:2020-05-06 10:41:16 【问题描述】:给定以下定义:
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
以下两次调用retrieveData有什么区别?
第一次调用:
let id: Int = 1
retrieveData(id: id)
self.update(with: $0)
第二次调用:
let id: Int = 1
retrieveData(id: id, completion:
self.update(with: $0)
)
【问题讨论】:
【参考方案1】:在方法中,
func retrieveData(for id: Int, completion: @escaping (Record) -> ())
completion
是一个尾随闭包。它是方法的最终参数。因此,在 Swift 中,我们可以在调用方法时省略在列表中写入 参数标签,即
retrieveData(for: id)
//your code..
你也可以这样称呼,
retrieveData(for: id, completion:
//your code..
)
所以,它可以以两种方式调用。你的选择。虽然第一个更清洁和推荐。阅读更多关于它的信息here。
【讨论】:
【参考方案2】:除了接受的答案 -
在 Swift 中,函数是第一类对象,这意味着它们可以作为参数传递。
在您的示例中,当有一个函数将另一个函数作为参数时,您可以使用尾随闭包语法内联编写参数:
let id: Int = 1
retrieveData(id: id)
self.update(with: $0)
但是看看函数update(with:)
,它是一个接受Record
并返回Void的函数。
另一种写法,而不是在闭包中调用函数,只是传递函数:
let id: Int = 1
retrieveData(id: id, completion: update)
请注意,您没有将参数或烤箱括号传递给它。当你以这种方式传递一个函数时,你传递的是函数本身,而不是评估函数的结果。
我认为这在呼叫现场更干净。
【讨论】:
以上是关于两个方法调用之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
Python的实例方法,类方法,静态方法之间的区别及调用关系
save(),saveOrUpdate(),merge()的区别
save()/saveOrUpdate()/merge()的区别
save(),saveOrUpdate(),merge()的区别