UISearchController 请求 web 服务而不堆叠许多请求

UISearchController request to webservice without stacking many requests

我正在使用 UISearchController 将对象发送到我的 tableview。我的主要问题是在用户键入文本时堆叠大量请求。

每次用户键入一个字符时,控制器都会向我的 api 发送另一个请求,这对我来说没有意义,因为第一个请求肯定是最长的(如果用户键入"a",大量物品即将到来,请求会耗费大量时间),会覆盖短请求

  1. 用户类型:a(第一个请求需要 10 秒才能获取包含 a 的所有内容)

  2. 用户继续输入:bacate(很多请求比第一个快)

  3. apireturns所有bacate(水果abacate)的请求都会显示在屏幕上。

  4. 现在api(因为要花很多时间)returns请求单个a并用包含a的所有水果覆盖。

对不起,我的问题很乱,我真的很困惑。

谢谢

那么你可以延迟发送请求并取消之前的请求。 这是我的例子:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    if searchText != "" {
        // to limit network activity, reload half a second after last key press.
        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(MyController.search), object: nil)
        self.perform(#selector(MyController.search), with: nil, afterDelay: 0.5)
    }
}

func search() {

    // Send request

}

您可以对搜索进行限制

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    // to limit network activity, reload half a second after last key press.
    NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(self.sendRequest), object: nil)
    self.perform(#selector(self.reload), with: nil, afterDelay: 0.5)
}
func sendRequest() {
    print("send request")

}