二十 Swift3.0之 闭包
2017-04-01 17:25
183 查看
/* 闭包: 函数是闭包的一种 类似于OC语言的block 闭包表达式(匿名函数) -- 能够捕获上下文中的值 语法: in关键字的目的是便于区分返回值和执行语句 闭包表达式的类型和函数的类型一样, 是参数加上返回值, 也就是in之前的部分 { (参数) -> 返回值类型 in 执行语句 } */ // 完整写法 let say:(String) -> Void = { (name: String) -> Void in print("hi \(name)") } say("lnj") // 没有返回值写法 let say2:(String) ->Void = { (name: String) in print("hi \(name)") } say2("lnj") // 没有参数没有返回值写法 let say3:() ->Void = { print("hi lnj") } say3() /* 闭包表达式作为回调函数 */ func showArray(array:[Int]) { for number in array { print("\(number), ") } } /* // 缺点, 不一定是小到大, 不一定是全部比较, 有可能只比较个位数 // 所以, 如何比较可以交给调用者决定 func bubbleSort(inout array:[Int]) { let count = array.count; for var i = 1; i < count; i++ { for var j = 0; j < (count - i); j++ { if array[j] > array[j + 1] { let temp = array[j] array[j] = array[j + 1] array[j + 1] = temp } } } } */ let cmp = { (a: Int, b: Int) -> Int in if a > b{ return 1; }else if a < b { return -1; }else { return 0; } } func bubbleSort(inout array:[Int], cmp: (Int, Int) -> Int) { let count = array.count; for var i = 1; i < count; i++ { for var j = 0; j < (count - i); j++ { if cmp(array[j], array[j + 1]) == -1 { let temp = array[j] array[j] = array[j + 1] array[j + 1] = temp } } } } var arr:Array<Int> = [31, 13, 52, 84, 5] bubbleSort(&arr, cmp: cmp) showArray(arr) // 闭包作为参数传递 bubbleSort(&arr, cmp: { (a: Int, b: Int) -> Int in if a > b{ return 1; }else if a < b { return -1; }else { return 0; } }) print("---------------") showArray(arr) // 如果闭包是最后一个参数, 可以直接将闭包写到参数列表后面, 这样可以提高阅读性. 称之为尾随闭包 bubbleSort(&arr) { (a: Int, b: Int) -> Int in if a > b{ return 1; }else if a < b { return -1; }else { return 0; } } // 闭包表达式优化, // 1.类型优化, 由于函数中已经声明了闭包参数的类型, 所以传入的实参可以不用写类型 // 2.返回值优化, 同理由于函数中已经声明了闭包的返回值类型,所以传入的实参可以不用写类型 // 3.参数优化, swift可以使用$索引的方式来访问闭包的参数, 默认从0开始 bubbleSort(&arr){ // (a , b) -> Int in // (a , b) in if $0 > $1{ return 1; }else if $0 < $1 { return -1; }else { return 0; } } // 如果只有一条语句可以省略return let hehe = { "我是lnj" } print(hehe())
相关文章推荐
- Swift 3.0基础学习之闭包
- swift 3.0 闭包,项目使用例子,结合GCD
- 二十一 Swift3.0之 闭包捕获值
- Swift3.0-闭包、运算符重载
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包,swift 3.0
- Swift3.0的闭包总结全
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包,swift 3.0
- swift3.0之闭包
- Swift3.0 闭包
- Swift3.0带来的变化汇总系列三——函数和闭包写法上的微调
- Swift 闭包表达式
- swift-3.0 将HexColor转变为UIColor的方法
- IOS_Swift_深入理解闭包 对比懒加载和普通赋值的区别
- Swift的学习(闭包2续)
- swift文档笔记(七) -- 闭包(Closures)
- Swift 闭包的使用
- Swift2学习:Swift概览3-函数和闭包
- Swift3.0 -- didSet(OC中重写setter方法)
- Swift 函数做参数和闭包做参数的一个细节差别
- Swift 闭包(Closures)传值