Swift-闭包
来源:互联网 发布:js非空提示 编辑:程序博客网 时间:2024/05/02 12:19
闭包表达式
{
(参数) ->返回值类型 in
执行语句
}
/* 1、 闭包表达式 { (参数) -> 返回值类型 in 执行语句 } */print("1、 闭包表达式")let sayHello = { print("hello")}sayHello()let add:(Int,Int) -> Int = { (a:Int,b:Int) -> Int in return a+b}print(add(3,2))/* 2、 闭包表达式作为函数回调 { (参数) -> 返回值类型 in 执行语句 } */print("\n2、 闭包表达式作为函数回调")func showArray(array:[Int]){// for i in array{// print("\(i) ")// } print(array)}//冒泡排序//func bubbleSort(array:inout [Int]){// for i in 1 ..< array.count// {// for j in 0 ..< array.count - i// {// if array[j] > array[j+1]// {// let t = array[j]// array[j] = array[j + 1]// array[j+1] = t// }// }// }//}func bubbleSort(array:inout [Int],cmp:(Int,Int) -> Int){ for i in 1 ..< array.count { for j in 0 ..< array.count - i { if cmp(array[j],array[j+1]) == -1 { let t = array[j] array[j] = array[j + 1] array[j+1] = t } } }}var arr = [20,30,4,5,80]showArray(array:arr)let intCmp:(Int,Int) -> Int = { (a:Int,b:Int) -> Int in if a>b{ return -1 }else if a<b { return 1 } else{ return 0 }}//bubbleSort(array: &arr)//bubbleSort(array: &arr,cmp:intCmp)//闭包表达式优化(类型推断机制--根据已经定义好的参数、返回值类型进行省略,且可以使用$符号进行参数省略,即 $0: 表示第一个参数)bubbleSort(array:&arr,cmp:{ if $0>$1 { return -1 }else if $0<$1 { return 1 } else{ return 0 }})showArray(array: arr)//.sort-系统冒泡排序arr.sort{ (a:Int,b:Int) -> Bool in return a>b}showArray(array: arr)/* 3、嵌套函数 */print("\n3、嵌套函数")func swap(a:inout Int,b:inout Int){ let t = a a = b b = t}//冒泡排序func bubbleSortFunc(array:inout [Int]){ for i in 1 ..< array.count { for j in 0 ..< array.count - i { if array[j] > array[j+1] { swap(a:&array[j], b:&array[j+1]) } } }}bubbleSortFunc(array: &arr)showArray(array: arr)/* 4、闭包捕获值 */print("\n4、闭包捕获值")//嵌套函数func getFuncValue(inc:Int) -> (Int) -> Int{ //内部函数(局部的),捕获了上下文的值 var m = 10 //对值进行保存并增加 func inFunc(v:Int) -> Int{ //var m = 10 //写在里面值不会被保存增加 m += 1 return inc+v+m } return inFunc}let getFunc1 = getFuncValue(inc: 2)let getFunc2 = getFuncValue(inc: 2)//每个函数都有自己独有的一份闭包print(getFunc1(10))//这时将m = 11当成了一个全局变量进行保存,因此值在不断增加print(getFunc1(10))print(getFunc2(10))
2 0
- Swift-闭包
- swift学习-闭包
- 【Swift初见】Swift闭包
- 闭包-简洁版(Swift)
- Swift学习-闭包(七)
- swift基础笔记2-闭包
- Swift 闭包(六)
- Swift之闭包
- swift closure 闭包
- swift,闭包
- Swift闭包表达式
- [Swift]闭包
- Swift 闭包
- 7.Swift-闭包
- Swift-闭包
- Swift 闭包
- Swift-Closures 闭包
- swift 闭包(closure)
- 微信开发工具tunneling socket could not be established错误
- 第13周项目1-Prim算法的验证
- vert.x 解决大视频播放问题
- cat
- BMP图片如何生成mif文件
- Swift-闭包
- find
- linux系统挂载NTFS移动硬盘 GPT分区 大于2T
- Cookie/Session机制详解
- asterisk-1.4.31----extensions.conf解读
- VTK: 检测点是否在三维物体内部
- 设计模式学习笔记--组合模式
- 快学Scala学习笔记及习题解答(1-4基础、控制、函数、数组、元组和映射)
- UVA 11584 Partitioning by Palindromes