逃逸闭包

// 逃逸闭包 :闭包的调函数结束之后或作用域之外

// 非逃逸闭包:闭包的调用再函数结束之前

// 逃逸闭包不能捕获inout 输入输出参数

class anayaa {

    typealias fn = (Int)->(Int)

    var getfun :((Int)->(Int))?

    // 调用函数 传进来的闭包表达式 不在函数作用域调用,而是赋值给变量,在作用域以外调用

    func anayfun(fn:@escaping fn) {

        getfun = fn

    }

    func action(){

        print("调用逃逸闭包-\(self.getfun!(2))")

    }

}

func anayaatest(o:inout Int){

    let ana = anayaa()

    ana.anayfun() { (b)->(Int) in

        // 逃逸闭包不能捕获inout 输入输出参数o

//        let c = b + 4 + o

        let c = b + 4

        return c

    }

    // 简化

//    ana.anayfun(a: 2) {

//        return $0+4

//    }

    ana.action()

    print("调用逃逸闭包-\(ana.getfun!(2))")

}

var a = 3

anayaatest(o:&a)

// 第二种情况

class dispatchc {

    typealias fn = (Int)->(Int)

    var a = 0

    // DispatchQueue 在函数结束后才调用时

    func anayfun(a:Int, fn:@escaping fn) {

        DispatchQueue.global().async {

            [weak self] in // 避免循环引用

            print(fn(a))

            self?.a = 10

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值