【swift-总结】闭包
来源:互联网 发布:dm游戏制作软件 编辑:程序博客网 时间:2024/05/18 17:44
其实闭包就是函数
作为条件的函数
闭包表达式
首先声明一个数组
var names = ["Charis", "Alex", "Ewa", "Barry", "Daniella"]
将这个数组按照字母排序
声明一个闭包函数
func backwards(s1: String, s2:String) -> Bool { return s1 > s2}
sorted()函数返回一个数组,sort()函数返回空,排序自身
///传入闭包函数names.sort(backwards)
使用闭包表达式
//闭包表达式就是一个函数在花括号里面names.sort({(s1: String, s2: String) -> Bool in return s1 > s2})
又因为swift的值是可推断类型
上面的又可以简化
var reversed = names.sorted({s1, s2 in return s1 > s2})
单闭包隐式返回
//会隐式returnnames.sorted({s1, s2 in s1 > s2})
名称缩写
names.sort({$0 > $1})
运算符函数
names.sort(>)
尾随闭包
有时候闭包表达式太麻烦,可以把闭包写在调用函数后面的花括号中
//调用sort函数,后面添加花括号,然后闭包表达式就写在这里names.sort() {$0 > $1}
官方例子
//声明一个字典let digitNames = [0:"zero", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine"]//一个数组let numbers = [16, 58, 510]//调用map函数,里面传入闭包let strings = numbers.map{//传入一个number返回一个String (var number) -> String in var output = "" while number > 0 { output = digitNames[number % 10]! + output//找到每一个数字,转为字符串 number /= 10 } return output}
值捕获
首先闭包是引用类型
官方例子
///定义一个返回() -> Int 类型的函数func makeIncrementor(forIncrement amount:Int) -> () -> Int { var runningTotal = 0 //一个闭包函数 func incrementor() -> Int { runningTotal += amount; return runningTotal } //返回这个闭包,此时这个闭包已经包含runningTotal和amount的值 return incrementor}
let incrementByTen1 = makeIncrementor(forIncrement: 10)let incrementByTen2 = makeIncrementor(forIncrement: 1)incrementByTen1() //10 所以值会被闭包一直保留incrementByTen1() //20incrementByTen2() //1
0 0
- 【swift-总结】闭包
- swift闭包总结
- Swift 闭包(Closure)总结
- Swift-闭包的使用和总结
- 【Swift初见】Swift闭包
- swift基本语法(总结提炼版)之012 swift 之闭包
- swift基本语法(总结提炼版)之013 swift 之闭包返回值
- swift基本语法(总结提炼版)之014 swift 之闭包循环引用
- Swift 闭包(六)
- Swift之闭包
- swift closure 闭包
- swift,闭包
- Swift闭包表达式
- [Swift]闭包
- Swift 闭包
- 7.Swift-闭包
- Swift-闭包
- Swift 闭包
- 创建一个win32应用程序的步骤
- 主机(win7_64)+Ubuntu+开发板(SAM9x5)通信问题
- navicat的认识和使用
- eclipse安装Hibernate反向生成实体类工具
- TCP常见问题FAQ
- 【swift-总结】闭包
- cordova build android提示No installed build tools found的解决方法
- eclipse离线安装adt
- 24个很酷的linux/unix工具
- 最后的冲刺
- bind 安装
- 只有成功利用大数据分析企业才能“任性”起来!
- 精和泛的一点思考(跨学科思维)
- ActiveX编译报错:Please use the /MD switch for _AFXDLL builds