swift 函数特性

  1 //函数体内享有外部所有作用域
  2 let global = "global"
  3 func fn (args: String, args2: String) -> String {
  4     print(global)
  5     return args + "\t" + 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 + "\t" + 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))
时间: 2024-11-11 15:32:18

swift 函数特性的相关文章

Swift 函数新特性

特性一:函数可以穿出不固定的同一种类型的参数(参数的个数不固定) example: “func sumOf(numbers: Int...) -> Int { var sum = 0 for number in numbers { sum += number } return sum}sumOf()sumOf(42, 597, 12) 特性二:返回元祖类型数据(元祖:是一种多元化的数据) example: “func calculateStatistics(scores: [Int]) ->

swift 函数.和匿名函数

函数 注意: 没有定义返回类型的函数会返回特殊的值,叫 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成(). 使用元组作为返回参数,返回多个参数 func count(string: String) -> (vowels: Int, consonants: Int, others: Int) { var vowels = 0, consonants = 0, others = 0 for character in string { switch String(charact

Swift函数编程之Map、Filter、Reduce

在Swift语言中使用Map.Filter.Reduce对Array.Dictionary等集合类型(collection type)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编程的开发者来说,对集合类型中的数据进行处理的时候第一反应可能就是采用for in遍历.本文将介绍一些Swift中可以采用的新方法. Map Map函数会遍历集合类型并对其中的每一个元素进行同一种的操作.Map的返回值是一个所得结果的数组.例如:我们要对一个数组里面的数据进行平方操作,常见的代码如下:

iOS开发——新特性篇&amp;swift新特性(__nullable和__nonnull)

swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生的一个新特性,就很认真的研究了一下. 在swift中,可以使用!和?来表示一个对象是optional的还是non-optional,如view?和view!.而在Objective-C中则没有这一区分,view即可表示这个对象是optional,也可表示是non-optioanl. 这样就会造成一个

【Swift初见】Swift函数(一)

在任何语言中,函数都是非常重要的,今天我们就来初步的学习下Swift中的函数. 1.Swift函数默认参数: ①.可以放在函数的任意位置: ②.外部名称与内部名称一致: ③.调用的时候可以不写: ④.在函数定义时传入参数里定义好. func joinString(s1: String , toString s2: String , joiner s3 : String = "*") -> String{ return s1 + s3 + s2 } let str = joinSt

Swift函数

函数定义 使用 func 定义一个函数.调用函数使用他的名字加 上小括号中的参数列表.使用 -> 分隔参数的名字和 返回值类型. 函数声明: func greet(name: String, day: String) -> String { return "Hello \(name),today is \(day)." } 函数调用:greet("Bob", "Tuesday") 无返回值函数 func sayGoodbye(pers

Swift函数和闭包

函数 Swift 使用func关键字声明函数: 1 func greet (name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet ("Bob", "Tuesday") 通过元组(Tuple)返回多个值: 1 func getGasPrices () -> (Double, Double, Double)

如何在C语言中调用Swift函数

在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中使用Objective-C中的类.在后半部分也介绍了如何在Swift中使用C函数,不过对于如何在C语言中使用Swift函数却只字未提.这里我就为大家分享一下如何在C语言中调用Swift函数. 我们首先要知道的是,所有Swift函数都属于闭包.其次,Swift函数的调用约定与Apple为Clang编译器贡献的B

Swift函数重载

1.函数重载的概念 函数的重载指的是多个函数享有相同的名字都是有不同的参数或返回值类型不同,它们互相成为重载关系, 2.与其它语言的不同 Swift函数的参数类型包含了参数列表类型和返回值类型,例如(Double,Double)->Double 是由2个Double类型参数列表和Double类型的返回值类型构成,也就是说Swift中函数名相同,参数列表不同或者返回值类型不同的函数都可以构成重载,而在C++或者JAVA中,函数的重载只是与参数列表有关系,与返回值没有关系 3.示例 func rec