另一个闭包内的闭包
Posted
技术标签:
【中文标题】另一个闭包内的闭包【英文标题】:Closure inside another closure 【发布时间】:2020-09-11 02:26:26 【问题描述】:在下面的实现中,我在另一个闭包中有闭包,并希望返回第二个闭包响应。 func customerAccount() -> Result
我卡住了。
public func customerAccount()
self.loadCurrentAccount (account) in
self.fetchData (result) in
// wonder how to return result from the parent method
print(result)
func fetchData(completion: @escaping(Result?) -> Void)
guard let context = self.context else return
let parameters = Parameters(scopes: scopes)
context.fetchData(with: parameters) (response, error) in
if let error = error
completion(nil)
guard let response = response else
return
completion(response)
【问题讨论】:
这能回答你的问题吗? Swift wait for closure thread to finish 如果fetchData
使用了一个异步函数context.fetchData
,那么它就不能同步返回一个尚未获得的值。
可能重复:Returning data from async call in Swift function
问题已修改。
【参考方案1】:
在这些情况下,最好使用完成块。完成块将返回异步值...
@IBAction func dataButtonClicked(_ sender: Any)
fetchData (res) in
self.result = res
func fetchData(completion: @escaping (Result?) -> Void)
guard let context = self.context else
completion(nil)
return
let parameters = Parameters(scopes: scopes)
context.fetchData(with: parameters) (response, error) in
if let error = error
completion(nil)
return
guard let response = response else
completion(nil)
return
completion(response)
【讨论】:
问题稍作修改。 抱歉,我不确定新问题在问什么……您要返回什么? 为什么不返回结果而不是打印呢?或者你可以为 customerAccount(completion: @escaping (Result?) -> Void) 做另一个完成块以上是关于另一个闭包内的闭包的主要内容,如果未能解决你的问题,请参考以下文章