首页 > 解决方案 > 这是一个适当的完成处理程序吗?

问题描述

我有一个非常慢的底部工作表,在加载数据一段时间后显示为空白。我尝试应用 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)
       }

标签: swiftclosuresswift5completionhandler

解决方案


isLoadedCompletionHandler不是完成处理程序,因为它在分配后立即被调用。

完成处理程序是您传递给函数的闭包,当该函数异步完成时将调用该闭包。你没有经过isLoadedCompletionHandler任何地方。

你可以写

getAllPurchaseDetail(searchId: searchId.value, solutionId: purchaseSolutionId)
    .subscribe(onNext: { [weak self] purchaseDetails in
        self?.result.onNext(.showPurhcaseSolutionDetails(purchaseDetails, currentTravelSolution))
   })
   .disposed(by: disposeBag)

并取得了同样的结果。


推荐阅读