// // main.swift // LessonSwiftSix // // Created by keyan on 15/9/13. // Copyright (c) 2015年 keyan. All rights reserved. // import Foundation /* (1)闭包的概念和分类 自包含的函数代码块 全局函数(有名) 闭包表达式(匿名)--能捕获上下文中德常量或者变量 嵌套函数(*) */ /* (2)闭包表达式的语法 func funcName(参数) -> 返回值类型{ 执行语句 } { (参数)->返回值类型 in 执行语句 } */ let sayhello = { println("hello World") } sayhello() let add:(Int,Int) ->Int = { (a:Int,b:Int)->Int in return a + b } println(add(3,5)) /* (3)闭包表达式回调用法 */ func showArray (array: [Int]) { for x in array { print("\(x),") } println() } func bubbleSort( cmp:(Int,Int) ->Int,inout array: [Int]){ let cnt = array.count for var i = 1;i<cnt; i++ { for var j = 0; j < cnt-i;j++ { if (cmp(array[j],array[j+1]) == -1){ let t = array[j] array[j] = array[j+1] array[j+1] = t } } } } var array = [20,3,2,70,8] //showArray(array) //let intcmp = { // (a:Int,b:Int) -> Int in // if a>b{ // return -1 // // } // else if a < b { // return 1 // } // else // { // return 0 // } //} //swift特有的类型推断 showArray(array) /* (4)闭包表达式优化 */ //bubbleSort(&array,{ //// (a,b) in // let x = $0 % 10,y = $1 % 10 // if x>y{ // return -1 // // } // else if x < y { // return 1 // } // else // { // return 0 // } //}) showArray(array) /* (5)尾随闭包 */ bubbleSort({ // (a,b) in let x = $0 % 10,y = $1 % 10 if x>y{ return -1 } else if x < y { return 1 } else { return 0 } } , &array ) //sort(&array,{ //// (a: Int,b: Int) -> Bool in //// return a < b // return $0 < $1 // //}) //尾随闭包 sort(&array){ // (a: Int,b: Int) -> Bool in // return a < b return $0 < $1 } showArray(array) /* 嵌套函数 */ //func swapValue(inout a : Int,inout b : Int) //{ // let t = a // a = b // b = t //} func bubbleSortFunc(inout array: [Int]){ let cnt = array.count //放到内部嵌套函数作用于内部 func swapValue(inout a : Int,inout b : Int) { let t = a a = b b = t } for var i = 1;i<cnt; i++ { for var j = 0; j < cnt-i;j++ { if (array[j]>array[j+1]){ // let t = array[j] // array[j] = array[j+1] // array[j+1] = t swapValue(&array[j], &array[j+1]) } } } } var array1 = [5,21,10,2,3] bubbleSortFunc(&array1) showArray(array1) /* (7)闭包捕获值 */ //func getIncFunc(inc :Int) -> (Int) -> Int{ // func incFunc(v: Int) -> Int { // return 10+v // } // return incFunc //} func getIncFunc(inc :Int) -> (Int) -> Int{ var mt = 10 func incFunc(v: Int) -> Int { mt++ return inc + mt + v } return incFunc } let incFunc1 = getIncFunc(3) let incFunc2 = getIncFunc(3) println(incFunc1(10)) println(incFunc1(10)) println(incFunc2(10))
时间: 2024-11-05 10:38:46