Swift 中的函数(下)

学习来自《极客学院: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 }
posted @ 2015-07-15 17:35  何杨  阅读(227)  评论(0编辑  收藏  举报