Swift5.1闭包

7.闭包

  • 闭包表达式

    闭包表达式一般形式:
    {
        (参数列表) -> 返回值类型 in
        statements
    }
    1.闭包常用方式
    //作为非空变量
    var closureName: (ParameterTypes) -> ReturnType
    //作为可为空变量
    var closureName: ((ParameterTypes) -> ReturnType)?
    //作为别名
    typealias ClosureType = (ParameterTypes) -> ReturnType
    //作为静态变量
    let closureName: ClosureType = { ... }
    
    2.闭包普通写法
    // 声明一个闭包(有两个整形参数,且返回值为整形的闭包)
        var sumClosure:((a: Int, b: Int) -> Int)
    // 实现闭包
    sumClosure = {  (a: Int, b: Int) -> Int in 
        return a + b
    }
    // 调用
    let sum = sumClosure(a: 10,b: 20)print(sum)
    
    3.闭包类型别名写法
    // 有参数无返回值的
    typealias Myclosure1 = (String) ->Void
    // 有参数无返回值的
    typealias Myclosure2=(String) ->String
    // 两个参数,一个返回值
    typealias Myclosure3=(String, String)->String
    // 无参数,无返回值
    typealias Myclosure4=()->Void
    // 使用如下
    var closure1: Myclosure1?
    closure1 = { (str: String) ->Void in
           print(str)
    }
    closure1!("HelloWorld")
    参考链接:https://blog.csdn.net/zgpeace/article/details/103903884
    
  • 尾随闭包:尾随闭包是一个书写在函数圆括号之后的闭包表达式,函数支持将其作为最后一个参数调⽤用

    //带参数与不带参数的尾随闭包
    func someClosureWithoutArgs(closure: () -> Void) {
            
    }  
    func someClosure(arg: String, closure: () -> Void) {
            
    }
    //在使⽤用尾随闭包时,你不用写出它的参数标签
    someClosureWithoutArgs {
         //statements
    }
    someClosure(arg: "string") {
         //statements
    }
    
    
  • 函数和闭包都是引用类型:无论你将函数或闭包赋值给一个常量还是变量,你实际上都是将常量或变量的值设置为对应函数或闭包的引用

  • 逃逸闭包:当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。当你定义接受闭包作为参数的函数时,你可以在参数名之前标注 @escaping,⽤来指明这个闭包是允许“逃逸”出这个函数的

  • 自动闭包:⾃动闭包是一种⾃自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调用的时候,会返回被包装在其中的表达式的值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。