swift 函数特性

  1 //函数体内享有外部所有作用域
  2 let global = "global"
  3 func fn (args: String, args2: String) -> String {
  4     print(global)
  5     return args + "	" + args2
  6 }
  7 
  8 var return_string: String =  fn("string1", args2: "string3331");
  9 print(return_string)
 10 
 11 
 12 
 13 
 14 
 15 //元组返回
 16 func minMax(array: [Int]) -> (Int,Int)? {
 17     if array.isEmpty {
 18         return nil
 19     }
 20     var curren_min = array[0]
 21     var curren_max = curren_min
 22     //array[1..<2] 数组截取
 23     for value in array[1..<array.count] {
 24         if curren_min > value {
 25             curren_min = value
 26         }else if curren_max < value {
 27             curren_max = value
 28         }
 29     }
 30     return (curren_min, curren_max)
 31 }
 32 
 33 print(minMax([1,2,3,5,2,99,0]))
 34 
 35 
 36 
 37 
 38 
 39 //外部参数名
 40 
 41 func fnOutParams(in1 args1: String, in2 args2: String) {
 42     print(args1 + "  " + args2)
 43 }
 44 fnOutParams(in1: "aa", in2: "bb")
 45 
 46 
 47 
 48 
 49 //省略外部参数名
 50 
 51 func fnOutParams(args1: String, _ args2: String) {
 52     print(args1 + "  " + args2)
 53 }
 54 fnOutParams("aa", "bb")
 55 
 56 
 57 
 58 
 59 //可变参数
 60 
 61 func avgNumbers(numbers: Double...) -> Double {
 62     var total: Double = 0
 63     for number in numbers {
 64         total += number
 65     }
 66     return total/Double(numbers.count)
 67 }
 68 print(avgNumbers(1,2,3,4,5.9,6,9,22))
 69 
 70 
 71 
 72 
 73 //参数重赋值(默认let 常量参数)
 74 
 75 func reFn(var args: String) {
 76     args = "cs";
 77     print(args)
 78 }
 79 reFn("reFn");
 80 
 81 
 82 
 83 
 84 //inout 指针传值
 85 
 86 func swapVariable(inout args: String, inout _ args2: String) {
 87     let tmp: String  = args
 88     args = args2
 89     args2 = tmp
 90 }
 91 var a = "args1"
 92 var b = "args2"
 93 swapVariable(&a, &b)
 94 print(a + "	" + b)
 95 
 96 
 97 
 98 
 99 
100 // 函数类型
101 
102 func addTwoInts(a: Int, _ b: Int) -> Int {
103     return a + b
104 }
105 func multiplyTwoInts(a: Int, _ b: Int) -> Int {
106     return a * b
107 }
108 
109 let addTwoInts2 = addTwoInts;
110 print(addTwoInts2(1, 2));
111 
112 
113 let variable_fn: (Int, Int) -> Int  = multiplyTwoInts;
114 
115 print(variable_fn(1, 2));
116 
117 
118 
119 
120 
121 
122 //函数作为参数
123 
124 func fnArgments(args: (Int, Int)-> Int, _ args2: Int, _ args3: Int) -> Int{
125     return args(args2, args3)
126 }
127 
128 print(fnArgments(addTwoInts2, 2, 3))
129 
130 
131 
132 
133 
134 //函数作为返回值
135 
136 
137 func fnRetruns(args: (Int, Int) -> Int) -> (Int, Int) -> Int{
138     return args
139 }
140 
141 let return_value = fnRetruns(multiplyTwoInts)(1, 5)
142 print(return_value);
143 
144 
145 
146 
147 //嵌套函数
148 
149 func fnNesting(bool: Bool) -> (Int) -> Int{
150 
151     func stepForward(input: Int) -> Int {
152         return input + 1
153     }
154 
155     func stepBackward(input: Int) -> Int {
156         return input - 1
157     }
158  
159     return bool ? stepForward : stepBackward
160 }
161 
162 print(fnNesting(true)(2))
原文地址:https://www.cnblogs.com/miss-once/p/5169292.html