Swift之GCD的變化

GCD在swift中有一些變化,大概是這樣的,大家可以去wwdc看看具體的內(nèi)容。

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    //‘尾’隨閉包
    //如果函數(shù)的最后一個(gè)參數(shù)是閉包,函數(shù)參數(shù)可以提前結(jié)束,最后一個(gè)參數(shù)直接使用{}包裝閉包的代碼
//        loadData { (jieguo) in
//            print("獲取的新聞數(shù)據(jù) \(jieguo)")
//        }
    //關(guān)于尾隨閉包
    // 要能看懂
    //能夠慢慢編寫 大多數(shù)xcode的智能提示可以補(bǔ)全
 
    //函數(shù)本身編寫的結(jié)果
    
    loadData(completion: { (jie) -> () in
        print(jie)
    })
}

func demo() ->() {
    //尾隨閉包
    DispatchQueue.global().async {
        //嵌套的 gcd xcode不會(huì)變成尾隨的閉包
        DispatchQueue.main.async(execute: { 
            
        })
    }
}

/**
 在異步執(zhí)行任務(wù),獲取結(jié)果,通過block/閉包 回調(diào)
 閉包的應(yīng)用場(chǎng)景和block完全一致
*/

   func loadData(completion: @escaping ([String])->()) -> (){
        //將任務(wù)添加到隊(duì)列,指定執(zhí)行的任務(wù)函數(shù)
        //翻譯:隊(duì)列調(diào)度任務(wù)(block/閉包),以同步/異步的方式執(zhí)行
        DispatchQueue.global().async {
            
            print("耗時(shí)操作 \(Thread.current)")
            //休眠
            Thread.sleep(forTimeInterval: 1.0)
            //獲得結(jié)果
            let json = ["頭條","出事了","八卦"]
            
            //主隊(duì)列回調(diào)
            DispatchQueue.main.async {
                print("主線程更新UI \(Thread.current)")
                
                //回調(diào) -》執(zhí)行閉包(通過參數(shù)傳遞的)
                //傳遞異步獲取的結(jié)果
                completion(json)
            }
        }
    

 }
}

對(duì)于尾隨閉包我的理解也不是很透徹,后面理解的再深一點(diǎn),然后再補(bǔ)充在這兒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容