在搜索时处理多个请求Alamofire

时间:2017-03-30 04:27:37

标签: ios swift alamofire

我有SearchContoller,每当用户开始搜索时,我都要显示结果。但是,即使没有从API接收数据,有时仍会在此处进行连续的API调用。 如何对它们进行排队,以便不会查看任何错放的数据。

    fileprivate func getData(searchString: String){
        getFriendList = false
        guard let currentUser = AppController.shared.currentUser else { return }
//        self.friendsList.removeAll()
        APIHandler.shared.doAPIGetCallForUrl(Constants.kcFindFriends + "?UserId=" + String(currentUser.userId) + "&seachString=" + searchString + "&PageNumber=" + String(pageNumber) , callback: { [weak self](success, jsonData, error) in
            guard let weakSelf = self else { return }
            guard success == true else {
//                weakSelf.findFriendsTableView.reloadData()
                return
            }
            guard let json = jsonData else { return }
            guard let findFriendList: [FriendList] = json.value() else { return }
            weakSelf.friendsList.append(contentsOf: findFriendList)
            weakSelf.findFriendsTableView.reloadData()
        })
    }

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    searchString = searchText
    pageNumber = 1
    getData(searchString: searchString)
}

2 个答案:

答案 0 :(得分:0)

  

在viewController中为请求定义var,并在其setter中取消任何旧请求

var searchRequest: Request?{
    didSet{
        oldValue?.cancel()
    }
}
  

在你的函数中将请求传递给那个var,所以每当你进行新的搜索时它都会取消旧的搜索。

searchRequest = Alamofire.request("URL", method: .post, parameters: nil)
        .responseJSON(completionHandler: { (response) in
            //Handle response
})

答案 1 :(得分:-1)

@BhavinRamani回复

 func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) {
    NSObject.cancelPreviousPerformRequestsWithTarget(withTarget: self, selector: #selector(YourView.getData(searchString:)), object: searchBar)


     if !searchBar.text.isEmpty {
        dispatch_after_delay(0.25) {
           searchString = searchText
           pageNumber = 1
          getData(searchString: searchString)
        }
    } else {


         }

}