美文网首页
函数与闭包

函数与闭包

作者: Liusr | 来源:发表于2017-05-19 11:26 被阅读14次

函数和闭包异曲同工

看完函数,再在看闭包时总是觉得相似

定义一个addTwoInts函数,返回a+b
定以一个printMath函数,其中一个参数mathFunction接收一个闭包,函数体内,就执行这个闭包
定义个一个printMathEscape函数,跟上面的printMath函数一样,只不过在global队列执行,就是说这个闭包可能会在函数返回后才执行


func addTwoInts(_ a: Int, _ b: Int) -> Int {
        return a + b
}

func printMath(_ mathFunction:(Int, Int) -> Int, _ a: Int, _ b: Int){
        print("print math result \(mathFunction(a, b))")
}
    
    /**“A closure is said to escape a function when the closure is passed as an argument to the function, but is called after the function returns. ”
    
    一个闭包被称为从一个函数中escape,当这个闭包作为一个参数被传递到那个函数中,但是却在函数返回之后调用。
    
    @escaping 两个条件:
    闭包作为参数
    闭包所在的函数return之后,函数执行
    (编译器其实会提示的)
    
   文档中举得例子,函数中将闭包加在数组中了,延迟调用数组成员
   在这里使用global队列一样的道理
    */
    func printMathEscape(_ mathFunction:@escaping (Int, Int) -> Int, _ a: Int, _ b: Int){
        
        DispatchQueue.global().async {
            print(mathFunction(a,b))
        }
    }

在这里调用上面的函数

常量mathFunc接收一个函数,常量multiply接收一个闭包,option键按住会发现他俩标注的类型是一致的
下面可以更好的理解闭包作为代码块的传递

    func demo2() {
        
        let mathFunc: (Int, Int) -> Int = addTwoInts
        let multiply = { (a: Int, b: Int) -> Int in
            return a * b
        }
        
        
        printMath(mathFunc, 1, 2)//3
        printMath(multiply, 1, 2)//2
        printMath({ (a: Int, b: Int) -> Int in
            return a * b
        }, 2, 2)//4
        printMathEscape({ (a: Int, b: Int) -> Int in
            return a * b
        }, 3, 3)
    }

block和c的函数指针就非常相似,闭包就是为了实现与之相同的功能。那么问题也是一样,开发中还要注意堆栈内存,捕获变量,引用这些问题。

相关文章

  • 2018-07-10swift4与swift 3.3 语法重拾(

    函数与闭包 闭包

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 2019-01-05 闭包

    内部函数和外部函数中被内部函数调用的变量组成了闭包。 例子:函数line与变量a构成了闭包。 1.闭包似优化了变量...

  • 闭包

    闭包 闭包和函数的区别:闭包可以储存一部分变量,函数不能,函数传什么有什么值 函数与匿名函数的区别,匿名函数可以完...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • JavaScript中闭包与this对象

    闭包 闭包与匿名函数容易混淆。闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内...

  • 【JavaScript ES6 函数式编程入门经典】读书笔记(第

    第四章 闭包与高阶函数 4.1 理解闭包 简而言之,闭包就是一个内部函数,是在另一个函数内部的函数,比如 这就是闭...

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • Rust 闭包初探

    Rust 中的闭包 Rust 中的闭包(closure)是一类特殊的函数。与普通函数相比,闭包是匿名的(当然你可以...

网友评论

      本文标题:函数与闭包

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