swift文档笔记(七) -- 闭包(Closures)

闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与 C Objective-C中的代码块(

locks)以及其他一些编程语言中的匿名函数比较相似。 函数和闭包都是引用类型。



1.闭包表达式语法 

闭包表达式语法有如下的一般形式:

{ (parameters) -> returnType in

     statements

如果闭包的函数体很短,可以将其改成一行代码并缩写成如下形式:

reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

闭包的参数名称可以缩写, 你可以直接通过 $0 $1 $2 来顺序调用闭包的参数,以 此类推。  

reversedNames = names.sorted(by: { $0 > $1 } ) 


2.尾随闭包

如果你需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。尾

随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。在使用尾随闭包时,你

不用写出它的参数标签:

     
     

func someFunctionThatTakesAClosure(closure: () -> Void)

// 函数体部分 

// 以下是不使用尾随闭包进行函数调用 

someFunctionThatTakesAClosure(closure: { 

// 闭包主体部分

}) 

// 以下是使用尾随闭包进行函数调用 

someFunctionThatTakesAClosure()

// 闭包主体部分


3.逃逸闭包 

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

var completionHandlers: [() -> Void] = []

func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {

    completionHandlers.append(completionHandler)

}



4.自动闭包 

自动闭包是一种自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调

用的时候,会返回被包装在其中的表达式的值。这种便利语法让你能够省略闭包的花括号,用一个普通的表达式

来代替显式的闭包。(感角没什么用,而且会让代码很难懂)

//自动闭包前

 // customersInLine is ["Alex", "Ewa", "Barry", "Daniella"]

 func serve(customer customerProvider: () -> String) {

     print("Now serving \(customerProvider())!")

 }

serve(customer: { customersInLine.remove(at: 0) } ) // 打印出 "Now serving Alex!" 

//自动闭包后

// customersInLine is ["Ewa", "Barry", "Daniella"]

 func serve(customer customerProvider: @autoclosure () -> String) {

     print("Now serving \(customerProvider())!")

 }

serve(customer: customersInLine.remove(at: 0)) // 打印 "Now serving Ewa!" 







      
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值