美文网首页SwiftUIiOS & macOS
Swift defer执行顺序

Swift defer执行顺序

作者: FicowShen | 来源:发表于2018-05-13 11:42 被阅读8次



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

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中捕获的变量的值是可以进行变更的。

相关文章

  • Swift defer执行顺序

    根据以下实例代码进行探索总结: testDefer(level: "") 的输出结果: testDefer(lev...

  • defer

    个人观点,欢迎指正 1.defer的执行顺序 defer的执行顺序为先进后出,先遇到的defer语句,后执行,类似...

  • go defer易错知识总结

    目录 defer执行时机 defer执行顺序 defer与return谁先谁后 函数包含多个Panic,defer...

  • Go Defer

    Go Defer 如果函数里面有多条defer指令,他们的执行顺序是反序,即后定义的defer先执行。 defer...

  • swift  defer  关键字 推迟执行

    Swift defer 关键字 延迟执行

  • 『go成长之路』 defer 作用、典型用法以及多个defer调

    预习内容 defer 的作用有哪些? 多个 defer 的执行顺序是怎样的? defer,return,函数返回值...

  • JS中另类的同步非阻塞加载

    Javascript执行顺序解释 Scripts without async or defer attribute...

  • swift中的defer使用场景

    延迟 个人理解类似闭包,会延迟执行,但只要执行了defer定义的代码就一定会执行。 执行顺序 defer的位置越靠...

  • 面试题总结

    不断更新中,欢迎帮忙补充 defer的执行顺序? slice底层? map是线程安全的吗? defer的执行时机?...

  • golang defer语句简单解析

    defer 下面举例说明了defer语句的作用: 输出结果: 很明显 defer语句的执行顺序是反的。这种语法给我...

网友评论

    本文标题:Swift defer执行顺序

    本文链接:https://www.haomeiwen.com/subject/gvtldftx.html