Swift编写延时任务

Swift已经不能使用performSelector了,会有类似这样的报错:

1
'performSelector' is unavailable: 'performSelector' methods are unavailable

解决办法是,可以使用dispatch_after

编写dispatch_after代码是很繁琐的。我现在的做法是编写NSObjectextension,即,给NSObject添加个delay方法,然后就可以在项目中随处调用了。

可以实现一个项目通用的swift文件,加入方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
import Foundation


extension NSObject{
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)

}
}

这里,利用了Swift的闭包,结合extension(类似objc的category),简化了使用。

然后,比如在ViewControllerviewDidLoad中调用:

1
2
3
4
5
6
7
8
override func viewDidLoad() {
super.viewDidLoad()

self.delay(0.5, closure: { () -> () in
println("hello")
})

...