Swift defer执行顺序



根据以下实例代码进行探索总结:

var varToChange = 0

func testDefer(level:String) {
    //作用域1整个函数是作用域
    defer{
        print("varToChange = \(varToChange)")
    }
    print("1-1")
    
    varToChange = 1
    
    if level == "2" {
        //作用域2 if作用域
        print("2--1")
        defer {
            print("2--2")
        }
        print("2--3")
    }
    print("1-2")
    
    defer {
        print("1-3")
    }
    print("1-4")
    
    if level == "3" {
        //作用域3 if作用域
        print("3---1")
        defer {
            print("3---2")
        }
        print("3---3")
        
        defer {
            print("3---4")
        }
    }
    print("1-5")
    defer {
        print("1-6")
    }
}

testDefer(level: "") 的输出结果:

1-1
1-2
1-4
1-5
1-6
1-3
varToChange = 1

testDefer(level: "2") 的输出结果:

1-1
2--1
2--3
2--2
1-2
1-4
1-5
1-6
1-3
varToChange = 1

testDefer(level: "3") 的输出结果:

1-1
1-2
1-4
3---1
3---3
3---4
3---2
1-5
1-6
1-3
varToChange = 1



总结:
defer 会在当前作用域(并不仅限于函数)结束时执行。
defer 执行的顺序为逆序(栈式)。
defer 中捕获的变量的值是可以进行变更的。




转载请注明出处,谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值