我有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)
}
答案 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 {
}
}