6.7 Swift闭包捕获值

时间:2021-11-21 22:46:17

        /**

         闭包的捕获值

         

         

         也就是闭包可以捕获上下文中的值

         */

        

        

        let incFunc1 =getInFunc(inc: 3)

        print(incFunc1)


        print("------------------>")

        print(incFunc1(10))

        

        

        

        let incFunc2 =getInFunc2(inc: 3)


        print("------------------>")

        print(incFunc2(10))

        print(incFunc2(10))

        

        /**

         v==10

         inc==3

         mt==11

         24

         

         v==10

         inc==3

         mt==12    // 它记住了上次的值11并不是说又变成10

         25

         

         */


    // 返回的是一个闭包 (Int) -> Int

    func getInFunc(inc:Int) -> ( (Int) ->Int ) {

        

        func incFunc(v:Int) -> Int {

        

            print("v==\(v)")

            print("inc==\(inc)")

            

            // inc在函数中生命周期结束了,但是可以捕获 inc

            return inc + v

        }

        

        returnincFunc

    }

    

    

    // 返回的是一个闭包 (Int) -> Int

    func getInFunc2(inc:Int) -> ( (Int) ->Int ) {

        

        var mt =10

        

        func incFunc(v:Int) -> Int {

            

            mt = mt + 1

            print("v==\(v)")

            print("inc==\(inc)")

            print("mt==\(mt)")


            

            // inc mt在函数中生命周期结束了,但是可以捕获 inc mt

            return inc + v + mt

        }

        

        returnincFunc

    }