我试图在swift 3.0中使用一些延迟(0.2 ms)来调用一个方法,我想要的是第一次使用延迟调用方法,并且当再次调用相同的方法时它应该取消之前的调用如果已经在0.2秒内调用过。我可以看到Objective c有performSelector和cancelPreviousPerformRequestWithTarget但我无法找到任何相同的Swift 3.0示例,任何人都可以帮忙。
答案 0 :(得分:2)
您的类必须是NSObject
的子类才能获得这些方法。
class MyClass: NSObject {
func performAction(afterDelay delay: TimeInterval) {
perform(#selector(MyClass.action), with: self, afterDelay: delay)
}
func action(sender: Any?) {
print("action called")
}
func cancel() {
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(MyClass.action), object: self)
}
}
但是,如果您只是需要稍微执行一些操作,可以检查GCD方法。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
//you action
}