swift:入门知识之函数与闭包

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符号(#)一样。

posted @ 2015-10-22 22:06  XYQ全哥  阅读(285)  评论(0编辑  收藏  举报