美文网首页
每天学一点Swift----函数(一)

每天学一点Swift----函数(一)

作者: 冯可乐同学 | 来源:发表于2017-05-18 21:44 被阅读7次

    1. Swift中支持嵌套函数。

    2.与函数紧密相关的另一个概念是闭包,闭包的本质是匿名函数,闭包可以作为表达式,函数参数或函数返回值。因此使用闭包可以让程序更加简洁。

    一.函数入门

    1.函数的定义和调用:定义函数时要使用关键字:func

    func max(x:Int, y:Int) -> Int

    var result = max(5, 9)

    2.函数的返回值:如果希望明确指定函数没有返回值,则有如下3种方式

    (1)直接省略“->类型”部分

    (2)使用“->()”返回一个空元组声明没有返回值

    (3)使用“->Void”表示没有返回值

    3. Swift中返回多个值:只要将返回的类型声明为元组类型,举个栗子

    func getmultiValue(nam:Double) -> (String, String)

    {

    var a = 123

    var b = 456

    return ("\(a)", "\(b)")

    }

    ----类型java返回一个Javabean

    4.递归函数:函数调用自身。

    二.函数的形参----外部形参名及其简化形式以计算矩形面积为例,普通的定义函数为:

    func getArea(width : Double, height : DOuble) -> Double

    {

    return width * height;

    }

    调用函数:var area = getArea(3, 8)

    上面函数中的形参只能在函数内部使用,因为它们是局部变量。在调用时不能看出各个形参含义。

    2. Swift允许在调用方法时指定参数名----这种可以在调用函数时起作用的形参名,被称为外部形参名。

    3.如果希望Swift在调用函数时也可以指定外部形参名,则需要在定义函数时也声明外部形参名----外部形参名写在局部形参的前面,中间用空格分隔。举个栗子:

    func getArea(宽width : Double,高height : Double)

    {

    return width * height;

    }

    调用:var area = getArea(宽:3,高:7)

    4.如果定义函数时指定了外部形参名,那么在调用函数时就必须使用外部形参名。

    5.使用简化外部形参:大部分清空下,定义的局部形参民已经可以很好地说明参数用途了,此时如果希望外部形参名同局部形参名保持一致,在布局形参名之前加#即可。举个栗子:

    func getArea(#width : Double, #height : Double)

    {

    return width * height;

    }

    调用函数:var area = (width:3, height:5)

    6. Swift也允许只为函数的部分形参指定外部形参名。举个栗子:

    func getArea(#width : Double, height : Double)

    {

    return width * height;

    }

    调用函数:var area = (width:3, 5)

    二.函数的形参----形参默认值:

    1.在某些情况下,程序需要在定义函数为部分形参指定默认值----这样调用函数时就可以省略该形参,而是直接使用该形参的默认值。

    2.举个栗子:

    func getArea(宽width : Double = 3.4, height : Double)

    {

    return width * height;

    }

    调用函数:

    var area1 = (5)//结果是3.4 * 5;

    var area2 = (宽:2, 5) //结果是2 * 5

    3. Swift建议把带默认值的形参放在函数形参列表的后面。

    4.如果定义函数时没有为带默认值的形参指定外部形参名,则Swift会自动为该形参加一个和该形参名相同外部形参名,就像在该形参名前面加#一样。举个栗子;

    func getArea(width : Double, height : Double = 5)

    {

    return width * height;

    }

    调用函数:

    var area1 = (3)//结果是3 * 5;

    var area2 = (5,height:6) //结果是5 * 6

    5.因为在调用定义了外部形参名的函数时,必须使用外部形参名。所以如果程序希望取消带默认值形参的外部形参名时可以显式地使用下划线作为外部形参名,这样可以取消带默认值形参的外部形参名。举个栗子:

    func getArea(width : Double, _ height : Double = 5)

    {

    return width * height;

    }

    调用函数:

    var area1 = (5)//结果是3.4 * 5;

    var area2 = (2, 5) //结果是2 * 5

    二.函数的形参----个数可变的形参

    1.同java中一样,使用三个点表示该形参类型的个数是不确定数量的多个。

    2.一个函数的形参列表中只能有一个个数可变的形参。

    3.个数可变的形参只能放在函数形参列表的最后。

    二.函数的形参----常量形参和变量形参

    1.函数形参默认是常量

    2.在某些情况下,程序希望直接使用函数形参作为变量从而避免在函数内部额外重新定义新的变量,此时可以用关键字var声明函数形参。举个栗子:

    func getArea(width : Double, var #height : Double)

    {

    width = width * height

    return width;

    }

    调用函数:

    var area1 = (5)//结果是3.4 * 5;

    var area2 = (2, height:5) //结果是2 * 5

    var width = 20;

    var area3 = (20, height:5) //结果是20,即width的值----注意形参和实参的区别

    3.需要注意的是如果传递该函数的参数是值类型的,由于Swift只是将参数的副本传入,因此在函数体内对形参的操作不会对参数本身产生任何影响。所以上面area3的值是20。

    二.函数的形参----In-Out形参

    1.对于传入的参数是值类型的,在函数体内的任何操作都对原来的变量不会产生影响,如果程序确实需要值类型的参数传入函数内部,则可以使用In-Out参数,通过inout关键字可以声明In-Out参数。举个栗子:

    func swap(inout a : Int, inout b : Int)

    {

    let temo = a;

    a = b;

    b = temp;

    }

    var a = 3

    var b = 6

    print(a, b)//输出3,6

    swap(&a, &b)

    print(a, b)//输出6,3

    2.可以看出,定义了In-Out参数后,程序在调用函数时通过在变量名前加前缀&即可把擦数传递给函数----其实就是C语言中的指针和地址的关系。但是可以看出,这里使用的时候比C语言中的*p和&a方便多了。

    3.对于引用类型的参数传递,In-Out参数同样有作用,但是这里注意的是:虽然两种方法都是对引用类型指向的实际对象进行操作,但是不使用In-Out参数时,传入的是引用的副本,使用了In-Out参数时使用的引用的本身,此时仍然需要用&前缀。

    相关文章

      网友评论

          本文标题:每天学一点Swift----函数(一)

          本文链接:https://www.haomeiwen.com/subject/qqrexxtx.html