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,⽤来指明这个闭包是允许“逃逸”出这个函数的
-
自动闭包:⾃动闭包是一种⾃自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调用的时候,会返回被包装在其中的表达式的值。
网友评论