Swift performSelector:withObject:afterDelay: [英] Swift performSelector: withObject: afterDelay:

查看:1431
本文介绍了Swift performSelector:withObject:afterDelay:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Objective C中有一个应用程序,我正在转换到Swift。在Objective C中,我有这个方法:

I have an app in Objective C that I'm transitioning to Swift. In Objective C, I have this method:

[self.view performSelector:@selector(someSelector)withObject:self afterDelay:0.1f];

我正在使用Swift,我无法弄清楚如何做到这一点。我试过了:

I'm working with Swift and I can't figure out how to do this. I've tried:

self.view.performSelector(Selector(someSelector),withObject:self,afterDelay:0.1)

这是我得到的错误:'performSelector'不可用:'performSelector'方法不可用

我将使用什么电话来调用方法 afterDelay

What call would I use to call a method 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)
        })
    }
}


推荐答案

Swift 3

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(0.1)) {
    // your function here
}

Swift 2

let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
    // your function here 
})

这篇关于Swift performSelector:withObject:afterDelay:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆