Live search throttle in Swift 3

血红的双手。 提交于 2019-12-01 06:55:24

Your error was because you probably forgot the #selector() part.

Here's how it should look:

func searchBar() { 
    NSObject.cancelPreviousPerformRequests(withTarget: self,    
                                           selector: #selector(self.getSearch(completed:searchString:)), 
                                           object: nil) 

    perform(#selector(self.getSearch(completed:searchString:)), 
            with: nil, afterDelay: 0.5) }

You get the error because you didn't enclose your function in #selector

Now, as for the arguments, here's a function for that:

perform(#selector(getSearch:completion:searchString), with: <some completion>, with: "search string")
David Fabreguette

Use DispatchWorkItem with Swift 4 !

// Add a searchTask property to your controller
var searchTask: DispatchWorkItem?


// then in your search bar update method

// Cancel previous task if any
self.searchTask?.cancel()

// Replace previous task with a new one
let task = DispatchWorkItem { [weak self] in
    self?.sendSearchRequest() 
}
self.searchTask = task

// Execute task in 0.75 seconds (if not cancelled !)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.75, execute: task)

Hope it helps !

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!