这是一个适当的完成处理程序吗?
Posted
技术标签:
【中文标题】这是一个适当的完成处理程序吗?【英文标题】:is this a proper completion handler? 【发布时间】:2019-10-17 08:39:51 【问题描述】:我有一个非常慢的底部工作表,在加载数据后显示为空白。我尝试应用completionHandler isLoadedCompletionHandler
,解决方案有效,但我的同事告诉我这不是“完成处理程序”。你能解释一下为什么这是有效的吗?如何?
func buttonDetailTapped(with travelSolutionId: String)
guard let currentPurchaseSolution = purchaseSolutions.value.first(where: $0.xmlId == purchaselSolutionId ) else return
getAllPurchaseDetail(searchId: searchId.value, solutionId: purchaseSolutionId)
.subscribe(onNext: [weak self] purchaseDetails in
let isLoadedCompletionHandler: ([PurchaseDetail]) -> Void = theArray in
self?.result.onNext(.showPurhcaseSolutionDetails(purchaseDetails, currentTravelSolution))
isLoadedCompletionHandler(purchaseDetails)
)
.disposed(by: disposeBag)
【问题讨论】:
当前显示的代码是您“尝试应用completionHandler”之后的代码,对吧?您可以在“尝试应用completionHandler”之前显示代码吗? 【参考方案1】:完成处理程序是您传递给函数的函数,通常在完成某些异步任务时调用。
您的buttonDetailTapped
函数不包含函数参数(即(Thing, Error) -> Void
),它们在完成时调用,因此您无法通过调用此函数知道它何时完成。
您的函数在完成后可能会继续执行其他操作,但没有完成处理程序。
【讨论】:
你会如何实现它 网上有很多从零开始学习 Swift 的好资源! SO 是深入了解很多问题的好地方,但是您要问的内容太广泛了。查看此链接了解更多信息,包括完整的实施细节:grokswift.com/completion-handler-faqs【参考方案2】:isLoadedCompletionHandler
不是完成处理程序,因为它在分配后立即被调用。
完成处理程序是您传递给函数的闭包,当该函数正在执行的任何异步操作完成时都会调用该闭包。你没有在任何地方传递isLoadedCompletionHandler
。
你本来可以写的
getAllPurchaseDetail(searchId: searchId.value, solutionId: purchaseSolutionId)
.subscribe(onNext: [weak self] purchaseDetails in
self?.result.onNext(.showPurhcaseSolutionDetails(purchaseDetails, currentTravelSolution))
)
.disposed(by: disposeBag)
得到了同样的结果。
【讨论】:
以上是关于这是一个适当的完成处理程序吗?的主要内容,如果未能解决你的问题,请参考以下文章