Function

import Foundation


//函数本身被看作一个类型,可以将函数作为参数,可以在函数中返回一个函数。

//同样可以在函数中定义一个内部函数。Nested Function


//variadic 可变参数 

//swift ...可以接受可变参数,想其他语言类似,如果由可变参数,必须放在最后

//另外,可变参数必须是指定的相同类型的,在swift中是将其当作数组来处理的。

func variadicFunc(tst:Double, variadicPara:Int...)

{

    print("可变参数为:")

   forin variadicPara

    {

       print("\(p) ")

    }

    println("")

}

variadicFunc(2.0,3,4,5,6)//4.0,"helo")都不可以,只能用相同的类型


//默认所有的函数的参数都是const的类型的,不能在函数内部当作变量来使用,如果想像C语言一样在函数中进行使用

//可以在前面加上var即可,这样的好处是可以少定义一个变量。但是值类型仍然不可作为输出参数。

var testdata =10

func varParameter(var varPara:Int, constPara:Int)

{

    varPara +=3

    //constPara += 3

    println("varPara:\(varPara)可以当作局部变量用,我就少定义了一个内部变量,但是constPara不可以")

}

varParameter(testdata,3)

println("变量并没有在varParmeter中被修改 testdata\(testdata)")


//⭐️⭐️ERROR 下面的函数会报错,因为Array是const的不能修改,在Xcode Beta1中是可以的。

func outputParameter(data:Array<String>)

{

    data[0] ="hello"

}


//可以让值类型参数带出函数的方法 inout,需要在函数调用的参数前加&并且该参数不能是默认值参数,variadic参数

func inoutFunc(inout temp:Int)

{

    temp +=10

}

println("Before  inoutFunc testdata:\(testdata)")

inoutFunc(&testdata)

println("After inoutFunc testdata:\(testdata)")


//局部参数和外部参数,如果定义时使用了外部参数,则在函数调用时必须加上外部参数

//局部参数在函数内部用,外部参数在函数调用时用来说明local参数,使参数的作用等更加明确

func clearParameter(externalparameter_first fst:Int,  externalparameter_second scnd:Int)

{

   println("复杂的外部参数:\(fst+scnd)")

}

//定义了外部参数的函数,在函数调用时参数前面必须加上外部参数

clearParameter(externalparameter_first:3, externalparameter_second:4)

//clearParameter(5,5) 报错 定义了external parameter后,在调用时必须加上。


//如果形参本身就比较清晰,可以在行参前面简单的加上#,参数名即是外部也是内部参数

func clearParameter2(#firstdata:Int,  seconddata:Int)

{

   println("简洁的external parameter\(firstdata+seconddata)")

}

clearParameter2(firstdata:3,4)


//无参数无返回值函数,没有返回值的函数在swift中会默认返回voidVoid是一个空的tuple

func sayHello1()

{

    println("hello1")

}

sayHello1()


//带有一个参数,一个返回值Int的函数,返回值用-> Type表示

func sayHello2(name:String)->Int

{

   println("hello2:"+name)

    return 1

}

sayHello2("dear")


//利用元组来返回多个返回值

func multipleReturn()->(data:Int,String,Int)

{

   return (1,"hello",2)

}


var ret = multipleReturn()

println(ret.data)

println(ret.1)//第二个数据没有名字,所以不能通过名字来索引

println(ret.2)


//函数参数的默认值

func testFunc(p1:Int=2, p2:Int =4)

{

    println("参数默认值testFunc\(p1+p2)")

}

testFunc()


//由上面可以看到,两个参数p1p2都提供了默认参数,那么如果调用函数testFunc3)那么这个

//参数应该时谁的值呢,没法确定!swift的做法是,每个带默认值的参数都默认的给添加了一个默认external parameter,这样当想给默认参数赋值的时候,就必须带着外部参数,例子:

testFunc(p1:10)//这样就可以给带默认参数的参数赋值啦



//函数类型 可与其他类型一样作为参数传递,函数返回值等使用。

//无参数无返回值类型参数,上面说过是void-空的tuple

var voidFunc:()->()

var twoParaFunc: (Int,Int)->()//有两个参数,没有返回值

var towParaFuncReturn: (Int,Int)->Int


func typeFuncTest(p1:Int, p2:Int)->Int

{

   return p1+p2

}

towParaFuncReturn = typeFuncTest

println("Function Type Test\(towParaFuncReturn(11,12))")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值