Swift3版本的performSelector和cancelPreviousPerformRequestWithTarget

时间:2017-03-24 16:14:54

标签: swift swift3

我试图在swift 3.0中使用一些延迟(0.2 ms)来调用一个方法,我想要的是第一次使用延迟调用方法,并且当再次调用相同的方法时它应该取消之前的调用如果已经在0.2秒内调用过。我可以看到Objective c有performSelector和cancelPreviousPerformRequestWithTarget但我无法找到任何相同的Swift 3.0示例,任何人都可以帮忙。

1 个答案:

答案 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
        }