【发布时间】:2016-10-04 09:18:58
【问题描述】:
说明:
我目前正在使用以下代码来查看用户是否已停止在 searchBar 中输入。每当用户在0.5 秒后立即开始输入时,我想取消它。
代码:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// your function here
}
问题:
如果用户再次开始输入Swift3,我该如何取消DispatchQueue.main.asyncAfter?
我尝试过的:
我之前尝试过实现:
NSObject.cancelPreviousPerformRequests(withTarget: self)
self.perform(Selector(("searchForText:")), with: searchString, afterDelay: 0.5)
但是延迟似乎无法正常工作。
更多代码:
//In class SearchViewController: UITableViewController, UISearchResultsUpdating
func updateSearchResults(for searchController: UISearchController) {
let searchString: String = searchController.searchBar.text!
//This is what I previously tried.. which doesn't work...
//NSObject.cancelPreviousPerformRequests(withTarget: self)
//self.perform(Selector(("searchForText:")), with: searchString, afterDelay: 0.5)
//A struct with the first example code shown above.
Utils.Dispatch.delay(secondsToDelay: 1){
print("1 second has passed ! " + searchString)
}
}
【问题讨论】:
-
我推荐你使用NSOperation,你将能够在操作之间添加依赖并重用、取消或暂停它们。
-
我找到了解决方案,当我完全确定它有效时,我会发布它作为答案。
-
您是否验证了您的解决方案?我现在也遇到同样的问题...
-
编辑:这里显然...stackoverflow.com/a/39684520/2387365