swift那些事儿 逃离闭包escaping

本文探讨了Swift中的逃逸闭包概念。逃逸闭包是指在函数返回后仍然需要执行的闭包,使用@escaping关键字进行标记。通过示例说明,解释了非逃逸闭包与逃逸闭包的区别,展示了一个逃逸闭包在函数结束后执行的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逃离闭包:当闭包作为一个参数给函数传递时,通常是在函数返回时调用的,如果需要在函数结束时调用闭包,则称为该闭包为逃离闭包用@escaping进行表明,通常情况下是非逃逸型闭包。

 

//声明一个数组,数组元素的类型是闭包
var closureArray:[()->Void] = []

//函数参数是逃离闭包类型的参数
func someFunctionWithEscapingClosure(ca:@escaping ()->Void){
    //将闭包作为一个元素添加到数组中
    closureArray.append(ca)
}

class SomeClass{
    func doSometing(){
        print("doSometing beging")
        //函数中调用函数someFunctionWithEscapingClosure
        someFunctionWithEscapingClosure{
            //脱离闭包的生命
            print("escaping closure begin")
        }
        //建立一个新的线程,执行closureArrayFirst函数
        let myThread = Thread(target: self,
                              selector: #selector(closureArrayFirst),
                              object: nil)
        //线程启动
        myThread.start()
        
        print("doSometing end")
    }

    @objc
    func closureArrayFirst(){
       print("myThread begin")
       //执行数组中第一个元素(元素是闭包也就是函数即执行一个函数)
       closureArray.first!()
    }
}

let sc = SomeClass()
sc.doSometing()

执行结果:

doSometing beging
doSometing end
myThread begin
escaping closure begin

在函数结束后闭包才得以被执行。输出:escaping closure begin

其中的

  someFunctionWithEscapingClosure{
            //脱离闭包的生命
            print("escaping closure begin")
        }

是下记闭包的略写

   someFunctionWithEscapingClosure(ca:{
            () -> Void in print("escaping closure begin")
        })

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值