我有一个Objective C的应用程序,现在正在转换为Swift。在Objective C中,我有这个方法:
[self.view performSelector:@selector(someSelector) withObject:self afterDelay:0.1f];
我正在使用Swift,但我无法弄清楚如何实现这一点。我尝试过:
self.view.performSelector(Selector("someSelector"), withObject: self, afterDelay: 0.1)
这是我得到的错误:'performSelector' is unavailable: 'performSelector' methods are unavailable
我该使用什么调用来调用一个带有afterDelay
参数的方法?
更新
这是我最终使用的代码:
extension NSObject {
func callSelectorAsync(selector: Selector, object: AnyObject?, delay: NSTimeInterval) -> NSTimer {
let timer = NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: selector, userInfo: object, repeats: false)
return timer
}
func callSelector(selector: Selector, object: AnyObject?, delay: NSTimeInterval) {
let delay = delay * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
NSThread.detachNewThreadSelector(selector, toTarget:self, withObject: object)
})
}
}
dispatch_after
使用调度队列,而performSelector:afterDelay:
使用当前运行循环。它们是不同的。 - user102008