swift - 这是一个适当的完成处理程序吗?
问题描述
我有一个非常慢的底部工作表,在加载数据一段时间后显示为空白。我尝试应用 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)
}
解决方案
isLoadedCompletionHandler
不是完成处理程序,因为它在分配后立即被调用。
完成处理程序是您传递给函数的闭包,当该函数异步完成时将调用该闭包。你没有经过isLoadedCompletionHandler
任何地方。
你可以写
getAllPurchaseDetail(searchId: searchId.value, solutionId: purchaseSolutionId)
.subscribe(onNext: { [weak self] purchaseDetails in
self?.result.onNext(.showPurhcaseSolutionDetails(purchaseDetails, currentTravelSolution))
})
.disposed(by: disposeBag)
并取得了同样的结果。
推荐阅读
- javascript - 在 JSON 文件中搜索
- python - 如何将旋转数据帧的转置插入 np.corrcoef 方法?
- java - org.springframework.ws.client.WebServiceTransportException:[ISS.0084.9001] 无效凭据 [401]
- javascript - 如何禁用 Microsoft Edge 浏览器的保存密码浏览器弹出窗口
- java - 无法在本地运行 GCP DataflowTemplates
- php - 如何在php中上传之前将base64图像调整为300 * 300?
- javascript - 如何从 blob url (URL.createObjectURL()) 创建 pdf 的文件对象
- java - POP3:连接到主机“pop.163.com”,端口 110,isSSL false
- sql - 如何在 SQL 中处理多维矩阵?
- kendo-ui - 如何在 xi18n Angular5 本地化中转义单个大括号