@escaping 逃逸閉包

逃逸閉包

func doWork(_block :()->()){

block()

}

//調(diào)用

doWork{

print("work")

}

func doWorkAsync(_block:@escaping()->()){

DispatchQueue.main.async{

block()

}

}

doWorkAsync{

print("doWorkAsync")

}

classS{

var foo ="foo"

func method1(){

doWork{

print(foo)

}

foo="bar"

}

func method2(){

doWorkAsync{

print(self.foo)//逃逸閉包中,強(qiáng)制加上swift

}

foo="bar"

}

func method3(){

doWorkAsync{

[weak self] in//這里沒有引用Self的實(shí)例引用

print(self?.foo??"為nil")

}

foo="bar"

}

}

S().method1()//輸出"foo"

S().method2()//輸出"bar"

S().method3()//這里輸出默認(rèn)值

//另外,如果協(xié)議或者父類定義了一個(gè)接受@escaping為參數(shù)方法,那么在實(shí)現(xiàn)協(xié)議和類型的或者這個(gè)父類的子類中,對(duì)應(yīng)的方法也必須被聲明為@escaping,否則兩個(gè)方法被認(rèn)為擁有不同的函數(shù)簽名

最后編輯于
?著作權(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)容