1、swift中使用关键字func来声明和定义一个函数。调用函数使用它的名字加上小括号中的参数列表。
2、swift使用->方向符号分隔参数的名字和返回值类型
3、swift使用元组(tuple)来返回多个值
4、函数可以接收可变参数个数,手机到一个数组中
5、函数可以嵌套。内嵌函数可以访问其定义的所在函数的变量。使用内嵌函数组织代码,可以避免过长和过于复杂
6、函数是第一类型的,这意味着函数可以作为返回值返回
7、函数还可以作为另一个函数的参数使用
8、闭包,闭包相当于一个匿名函数(匿名函数做函数的参数),所有传函数参数的地方都可以使用闭包
9、有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。此时,可以为参数设置外部形参名。
具体举例如下:
定义一个有参数的函数,返回值为Int型函数,使用->类型来返回值
//定义一个有参数的函数 func sum(a:Int,b:Int)->Int{ return a+b } //函数调用 sum(10, 20) //30
使用元组来返回多个值,通过元组名.0获取第一个值,剩下的值依次可以获取
//使用元组来返回多个值的函数 func getGasprices()->(Double,Double,Double){ return (1.0,2.0,3.0) } //函数调用 getGasprices() //(.0 1.0, .1 2.0, .2 3.0)
通过一个类型...的方式定义可变参数的函数,参数个数根据你调用函数时传递的参数而定
//定义可变参数的函数 func sumOfArr(numbers:Int...)->Int{ var sum = 0 for temp in numbers{ sum += temp } return sum } //函数调用 sumOfArr(2,4,6,1,7,8) //28
在函数内部嵌套定义另一个函数
//函数内部嵌套定义函数 func returnFunc()->Int{ var y = 10 func add(){ y += 5 } add() return y } //函数调用 returnFunc() //15
可以将函数作为一个返回值返回
//从函数内部函数返回一个函数 func makeIncrement()->(Int->Int){ func addOne(number: Int)->Int { return 1 + number } return addOne } //接收一个返回的addOne函数 var increment = makeIncrement() //调用这个返回的函数 increment(7) //8
函数可以作为参数使用
//函数做参数使用 func search(Array:[Int],Condition:Int->Bool)->Bool{ for num in Array{ if Condition(num){ return true } } return false } func equalTen(num:Int)->Bool{ return num == 10 } var arr:[Int] = [23,15,7,9,10]
//将equalTen函数作为search函数的参数 search(arr, equalTen) //true
闭包的使用,其实闭包就是一个匿名的函数,它被当做参数传递给函数,类似Objective-C中的block函数
//闭包,闭包相当于一个匿名函数(匿名函数做函数的参数) //所有传函数参数的地方都可以使用闭包 //实例一:number.map({...})是系统定义好的一个闭包函数 var numbers = [2,4,5,1,6] numbers.map({(number:Int)->Int in return number * number }) //实例二:自定义的一个闭包函数 func search2(arr:[Int],Condition:(Int)->Bool)->Bool { for num in arr{ if Condition(num){ return true } } return false } var arr2 = [3,5,6,9,2] search(arr2, {(number:Int)->Bool in return number == 6 })
参数外部名的使用:
兴趣来了,给大家分享一个超前的知识,使用swift创建一个按钮蛮好玩的
//创建按钮 var button:UIButton = UIButton( frame: CGRectMake(0, 0, 100, 100)) button.backgroundColor = UIColor.redColor() button.setTitle("open", forState:UIControlState.Normal)
截图:
函数形参名知识拓展:有时给参数设置一个外部名,在调用函数时可以明确知道所传参数的意思.避免含糊不清....
普通的参数名格式:
外部形参名格式:
使用外部形参名有很大的好处,可以很明确的表达函数的意思,避免含糊不清。例如:
//调用这个函数时,所传的意思比较模糊:
//给它设置一个外部名,传参数时意思就一目了然了。
外部参数名称速记
如果你想为一个函数提供一个外部形参名,然而本地形参名已经使用了一个合适的名称了,那你就不需要两次书写该形参的名称。相反,你可以写一次名字,并用一个hash符号(#)作为名称的前缀。这就告诉Swift使用名称相同的本地行参名称和外部形参名称。
默认形参值
你可以为任何形参定义默认值以作为函数定义的一部分。如果已经定义了默认值,那么调用函数时就可以省略该行参。
注意:请在函数形参列表的末尾放置带默认值的形参。这将确保所有函数调用都使用顺序相同的无默认值实参,并让在每种情况下清晰地调用相同的函数。
有默认值的外部形参名
在大多数情况下,为所有形参提供一个带默认值的外部名是非常有用的(因此要求)。如果在调用函数的时候提供了一个值,那么这将确保形参对应的实参有着明确的目的。
为了使这个过程更容易,当你自己没有提供外部名称时,Swift将为你定义的任何默认形参提供一个自动外部名。这个自动外部名和本地名一样,就像你已经在本地名前添加了hash符号(#)一样。