学习来自《极客学院:Swift中的函数》
工具:Xcode6.4
直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会
1 import Foundation 2 3 /***********嵌套函数*************/ 4 func getMathFunc(#type: String) -> (Int) -> Int{ 5 func squre(num:Int) -> Int{ 6 return num*num 7 } 8 func cube(num:Int) -> Int{ 9 return num*num*num 10 } 11 switch(type){ 12 case "square": 13 return squre 14 default: 15 return cube 16 } 17 } 18 var mathfunc = getMathFunc(type: "other") 19 println(mathfunc(4)) 20 //由于嵌套函数在外函数内部只作用于该函数内部,所以使用闭包简化这个嵌套函数 21 22 /***********闭包*************/ 23 /* 24 { (形参列表) -> (返回值) in 25 可执行语句 26 } 27 */ 28 func getMathFunc_1(#type: String) -> (Int) -> Int{ 29 // func squre(num:Int) -> Int{ 30 // return num*num 31 // } 32 // func cube(num:Int) -> Int{ 33 // return num*num*num 34 // } 35 switch(type){ 36 case "square": 37 return { 38 (num:Int) -> Int in 39 return num * num 40 } 41 default: 42 return { 43 (num:Int) ->Int in 44 return num * num * num 45 } 46 } 47 } 48 var mathfunc_1 = getMathFunc_1(type: "other") 49 println(mathfunc_1(5)) 50 //利用上下文推断类型 51 var squre1: (Int) -> Int = {(num) in return num*num } 52 println(squre1(8)) 53 var squre2: (Int) -> Int = {num in return num*num } 54 println(squre2(9)) 55 //省略形参名,通过$0,$1...来引用第一个、第二个参数 56 var squre3: (Int) -> Int = {$0 * $0} 57 println(squre3(10)) 58 59 //闭包的经典使用 60 var result: Int = { 61 var result = 1 62 for i in 1...$1{ 63 result *= $0 64 } 65 return result 66 }(4,3) 67 println(result) 68 69 //尾随闭包 70 func someFunction(num:Int,fn: (Int)->()){ 71 //执行代码 72 }//第一个参数为整型,第二个参数为闭包 73 //调用这个函数: someFunction(20,{}) 74 //使用尾随闭包调用函数的格式:someFunction(20){} 75 76 //捕获上下文中的变量或者常量 77 func makeArr(ele:String) ->() ->[String]{ 78 //创建一个不包含任何元素的数组 79 var arr: [String] = [] 80 func addElement() -> [String]{ 81 //向arr数组中添加一个元素 82 arr.append(ele) 83 return arr 84 } 85 return addElement 86 }