Swift学习笔记(12)——闭包
来源:互联网 发布:飞鹰直销软件 编辑:程序博客网 时间:2024/05/16 07:00
语法
以下定义了一个接收参数并返回指定类型的闭包语法:
{(parameters) -> return type in statements}
简单的小例子:
let divide = {(val1: Int, val2: Int) -> Int in return val1 / val2 }let result = divide(200, 20)print (result)//以上程序执行输出结果为:10
一
let names = ["AT", "AE", "D", "S", "BE"]// 使用普通函数(或内嵌函数)提供排序功能,闭包函数类型需为(String, String) -> Bool。func backwards(s1: String, s2: String) -> Bool { return s1 > s2}var reversed = names.sorted(by: backwards)print(reversed)// 以上程序执行输出结果为:// ["S", "D", "BE", "AT", "AE"]
sorted(by:)方法需要传入两个参数:
1.已知类型的数组。 || 例子中为names数组
2.闭包函数。 || func backwards(s1: String, s2: String)->Bool {return s1 > s2}
传入参数:2个,与数组元素类型相同 || 两个Sting类型
返回值:布尔类型值。 || s1>s2,大于true
True——排序结束后传入的第一个参数排在第二个参数前面
False——排在后面
二
参数名称缩写。可以直接通过
若用参数名称缩写,可以在闭包参数列表中省略对其定义, swift会进行函数类型推断。in 关键字同样也可以被省略。
实例
let names = ["AT", "AE", "D", "S", "BE"]var reversed = names.sorted( by: { $0 > $1 } )print(reversed)// $0和$1表示闭包中第一个和第二个String类型的参数。// 以上程序执行输出结果为:// ["S", "D", "BE", "AT", "AE"]
三
let names = ["AT", "AE", "D", "S", "BE"]var reversed = names.sorted(by: >)print(reversed)// 以上程序执行输出结果为:// ["S", "D", "BE", "AT", "AE"]
利用运算符函数,只传递一个运算符。
使用前提:sorted(by:)方法与(>)大于号运算符函数的传入参数和返回值类型相同。
Swift 的String类型定义了关于大于号 (>) 的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。 而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。
四.尾随闭包
let names = ["AT", "AE", "D", "S", "BE"]//尾随闭包var reversed = names.sorted() { $0 > $1 }print(reversed)// sort() 后的 { $0 > $1} 为尾随闭包。// 以上程序执行输出结果为:// ["S", "D", "BE", "AT", "AE"]
如果函数只需要闭包表达式一个参数,使用尾随闭包时,甚至可以把()省略掉。即为:reversed = names.sorted {
五.捕获值
闭包的形式有:
1.全局函数:有名字但不能捕获任何值。
2.嵌套函数:有名字,也能捕获封闭函数内的值。
3.闭包表达式:无名闭包,使用轻量级语法,可以根据上下文环境捕获值。
func makeIncrementor(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementor() -> Int { // 闭包获取了runningTotal和amount的值 runningTotal += amount return runningTotal } return incrementor}let incrementByTen = makeIncrementor(forIncrement: 10)// 返回的值为10print(incrementByTen())// 返回的值为20print(incrementByTen())// 返回的值为30print(incrementByTen())//以上程序执行输出结果为://10//20//30
- Swift学习笔记(12)——闭包
- Swift学习笔记系列——(6)闭包
- Swift学习笔记7——闭包(Closures)
- 闭包—Swift学习笔记(十)
- swift学习笔记(7)-闭包
- 【Swift】学习笔记(七)——闭包
- 黑马程序员——Swift学习笔记:闭包
- Swift 学习笔记 - 闭包
- 《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!
- 《从零开始学Swift》学习笔记(Day 23)——尾随闭包
- The Swift Programming Language学习笔记(八)——闭包
- 《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!
- 《从零开始学Swift》学习笔记(Day 23)——尾随闭包
- swift 笔记 (七) —— 闭包
- swift闭包——swift学习(六)
- Swift学习笔记-函数和闭包(1)
- Swift学习笔记-函数和闭包(2)
- Swift学习笔记第五篇(闭包和枚举)
- EBS并发请求生成trace及分析
- zookeeper选举原理
- severletContext读取WEB工程下的文件
- [leetcode] 83. Remove Duplicates from Sorted List
- 图片三级优化
- Swift学习笔记(12)——闭包
- hibernate数据库链接加中文乱码处理的参数方法
- android平台解决找不到sun.misc.BASE64Enocder的问题
- [BZOJ 2456] mode 常数时间求众数/队列压缩
- CodeForces
- android 手机全屏
- 网络编程--tcp
- js获得当前时间是年份和月份
- s3c2440定时器简介