Swift编程-闭包Closure

9 篇文章 1 订阅

目录

1.闭包的表达式

2.根据上下文推断类型

3.单表达式隐式返回

4.简写参数名称

5.运算符方法

6.尾随闭包

7.总结


Swift编程里面的闭包(Closure),是自包含的函数代码块,可以在代码中被传递和引用,可以捕获和存储所在上下文中任意的常量和变量的引用,被称为包裹常量和变量。

1.闭包的表达式

{ (parameters) -> return type in
    statements
}

以系统的sorted函数举例,sorted(by:)

var names = ["a张三","c李四","b小米"]
//定义一个闭包函数
func JPmethod(_ s1:String,_ s2:String) -> Bool{
	return s1 > s2
}
var results = names.sorted(by:JPmethod)//传入函数名称
print(results)

sorted函数的参数就是一个闭包,如上面就是定义了一个闭包,然后再传入,不直接定义闭包的话,可以直接在参数里面写闭包也是可以的

var names = ["a张三","c李四","b小米"]
var results = names.sorted(by: {(_ s1:String,_ s2:String) -> Bool in
	return s1 > s2
})
print(results)

2.根据上下文推断类型

闭包作为参数传递给方法,Swift可以推断出它的参数类型以及它返回的值的类型,这意味着不需要将类型作为闭包表达式定义的一部分来编写。因为可以推断出所有类型,所以也可以省略返回箭头(->)和参数名称周围的括号:

//根据上下文推断类型
var results1 = names.sorted(by: {s1,s2 in
	return s1 > s2
})

3.单表达式隐式返回

单表达式闭包可以省略return关键字来隐式返回单个表达式的结果

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

4.简写参数名称

Swift自动提供内联闭包速记参数名,它可以使用的名称,指的是闭包的参数值1,$2,等等。

在闭包表达式中使用这些简写参数名称,则可以从其定义中省略闭包的参数列表,并且将从期望的函数类型推断缩写参数名称的数量和类型。in关键字也可以被省略

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

5.运算符方法

var results1 = names.sorted(by: >)

6.尾随闭包

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

func jpClosure(closure:()->Void){
	//函数体部门
}
//不使用尾随闭包进行函数调用
jpClosure(closure:{
	 //闭包体部分
})
//使用尾随闭包进行函数调用
jpClosure(){
}

如果提供闭包表达式作为函数或方法的唯一参数,并且将该表达式作为尾随闭包提供,则在调用函数时,不需要在函数或方法的名称后面写一对括号():

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

7.总结

闭包Closure表达式是一种未命名的闭包,用轻量级语法编写,可以从上下文中捕获值。

Swift的闭包表达式具有干净,清晰的风格,闭包的优势包括:

  • 从上下文中推断参数和返回值类型
  • 单表达式闭包的隐式返回
  • 速记参数名称
  • 尾随闭包语法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡西Sensei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值