如何向该函数添加完成处理程序



我目前有一个函数,如果条件不满足,它会调用self(工作非常好),但现在我想向它添加一个completionHandler,我已经尝试过不同的方法,但从未返回completion,这是我尝试过的任何方法
runSearch()

func runSearch(){
    search{
        _ in
        if (parResults.count < 20 && self.searchCounter < 20){
            self.runSearch()//Run search again**
        }
        if (parResults.count >= 20 && self.searchCounter < 20){
            self.searchComplete = true
        }
    }
}

我尝试过的

带有completionHandler调用的runSearch()

self.runSearch{
  msg in
print("all done") //Not executed
}

带有completionHandler函数1的runSearch()

func runSearch(completionHandler: (Bool) -> ()) -> () {
    search{
        _ in
        if (parResults.count < 20 && self.searchCounter < 20){
            self.runSearch{
                _ in
            }
        }
        if (parResults.count >= 20 && self.searchCounter < 20){
            self.searchComplete = true
            completionHandler(true)// Never returned
        }
    }
}

带有completionHandler函数2的runSearch()

 func runSearch(completionHandler: (Bool) -> ()) -> () {
    search{
        _ in
        if (parResults.count < 20 && self.searchCounter < 20){
            self.runSearch{
                _ in
                if (parResults.count >= 20 && self.searchCounter < 20){
                    self.searchComplete = true
                    completionHandler(true)//Not returned
                }
            }
        }
        if (parResults.count >= 20 && self.searchCounter < 20){
            self.searchComplete = true
        }
    }
}

每次新调用runSearch:时,您都需要将您的completionHandler传递给

func runSearch(completionHandler: (Bool) -> ()) {
    search{
        _ in
        if (parResults.count < 20 && self.searchCounter < 20){
            self.runSearch(completionHandler) // <-------
        } else if (parResults.count >= 20 && self.searchCounter < 20){
            self.searchComplete = true
            completionHandler(true)
        }
    }
}
func runSearch(completionHandler: (Bool) -> ()) -> () {
    search{
        _ in
        if (parResults.count < 20 && self.searchCounter < 20){
            self.runSearch(completionHandler)
        }
        if (parResults.count >= 20 && self.searchCounter < 20){
            self.searchComplete = true
            completionHandler(true)// Never returned
        }
        if (parResults.count == 0 && self.searchCounter == 20){
            self.noResultsFound = true
            completionHandler(true) //Never returned
        }
        if (parResults.count != 0 && self.searchCounter == 20){
            self.searchComplete = true
            completionHandler(true) // Never returned
        }
    }
}

最新更新