我从Apple那里浏览了iBook,找不到任何定义:
有人可以解释结构dispatch_after吗?
dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
Run Code Online (Sandbox Code Playgroud) 我目前正在使用以下代码来查看用户是否已停止在searchBar中输入内容.每当用户在0.5几秒钟后立即开始输入时,我想取消它.
码:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// your function here
}
Run Code Online (Sandbox Code Playgroud)
DispatchQueue.main.asyncAfter如果用户再次开始输入,如何取消Swift3?
我之前尝试过实施:
NSObject.cancelPreviousPerformRequests(withTarget: self)
self.perform(Selector(("searchForText:")), with: searchString, afterDelay: 0.5)
Run Code Online (Sandbox Code Playgroud)
然而,延迟似乎没有正常工作.
更多代码:
//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 ! " + …Run Code Online (Sandbox Code Playgroud) 我使用动画来指定提示以帮助延迟交互使用这些:
let delay = 1.8 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
//call the method which have the steps after delay.
self.rain.alpha = 0
UIView.animateWithDuration(5, animations: {
self.rain.alpha = 1
})
self.tip.startAnimating()
}
Run Code Online (Sandbox Code Playgroud)
但是,如果在动画开始之前,用户触摸屏幕,我需要停止此延迟过程.
这个问题早已被问到了。但是我找不到适合当前Swift版本的不错的解决方案。
Swift 4-如何取消对的特定通话DispatchQueue.main.asyncAfter?
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// my code
}
Run Code Online (Sandbox Code Playgroud)
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
// just cancel this event!
}
Run Code Online (Sandbox Code Playgroud) 快速地,如何在用户停止在文本字段中键入内容后1秒钟运行一些代码?有一个,textFieldDidChange但是它将在键入新字符后立即运行代码。