前言
開發(fā)中,經(jīng)常會用到定時(shí)執(zhí)行網(wǎng)絡(luò)請求、倒計(jì)時(shí)、計(jì)時(shí)器等功能,本篇文章介紹在iOS開發(fā)中,Swift怎樣使用GCD實(shí)現(xiàn)這些功能。
執(zhí)行一次
下面的代碼將會在5秒后執(zhí)行,且只執(zhí)行一次。
let time: NSTimeInterval = 5.0
let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) {
self.getTaskList(false)
}
執(zhí)行多次
下面的代碼是一個(gè)60秒倒計(jì)時(shí)的例子。
var _timeout: Int = 60
let _queue: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let _timer: dispatch_source_t = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _queue)
// 每秒執(zhí)行
dispatch_source_set_timer(_timer, dispatch_walltime(nil, 0), 1 * NSEC_PER_SEC, 0)
dispatch_source_set_event_handler(_timer) { () -> Void in
if _timeout <= 0 {
// 倒計(jì)時(shí)結(jié)束
dispatch_source_cancel(_timer)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
// 如需更新UI 代碼請寫在這里
})
} else {
print(_timeout)
_timeout--
dispatch_async(dispatch_get_main_queue(), { () -> Void in
// 如需更新UI 代碼請寫在這里
})
}
}
dispatch_resume(_timer)