iOS開發 - Swift使用GCD實現計時器功能

前言

開發中,常常會用到定時執行網絡請求、倒計時、計時器等功能,本篇文章介紹在iOS開發中,Swift怎樣使用GCD實現這些功能。git

執行一次

下面的代碼將會在5秒後執行,且只執行一次。github

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)
}

執行屢次

下面的代碼是一個60秒倒計時的例子。網絡

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)

// 每秒執行
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 {
        
        // 倒計時結束
        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)

交友互動:

本文首發於馬燕龍我的博客,歡迎分享,轉載請標明出處。
馬燕龍我的博客:http://www.mayanlong.com
馬燕龍我的微博:http://weibo.com/imayanlong
馬燕龍Github主頁:https://github.com/yanlongmaasync

相關文章
相關標籤/搜索