Swift基本语法(二)函数

/*------------------------------函数------------------------------*/


func sayHello(name :String) -> String  //  -> 后面的是返回值类型,前面的是函数的形参类型

{

   return name +" Hello";

}


var Hint_hello =sayHello("Tom") ?? "NO RETURN"   // 此处使用了空合并

println(Hint_hello)


func maxNum(num_1:Int , num_2:Int) -> Int

{

   return num_1 > num_2 ? num_1: num_2;  // 此处返回值调用了三目运算符

}


println(maxNum(12,10))


/*--------------------------函数的参数------------------------------*/

func area_n(width:Double, height :Double) ->Double

{

   return width * height;

}

// widthheight都是内部参数

println("调用内部参数函数\(area_n(1.2,2.5))");


// 两个汉字作为area_w函数的外部参数,width和height作为area_w函数的内部参数

func area_w( width:Double, height :Double) ->Double

{

   return width * height;

}

//widthheight都是内部参数,宽则是外部参数

println("调用外部参数函数 \(area_w(:1.4,:1.8))")


//当外部参数和内部参数一致时,可以用#号代替

// width和height即为外部参数,又为内部参数

func area_s(#width:Double, #height:Double)->Double

{

   return width * height

}


println("内,外部参数名一致\(area_s(width:1.3, height:1.5))")


/*----------------------可变参数---------------------*/

func sum(num :Int...) -> Int  // ... 表示sum函数的传入参数个数可变

{

   var sumInt :Int =0;

   for itemin num

    {

        sumInt += item;

    }

   return sumInt

}

//一个可变参数的函数的形参最多只有一个,且放在形参列表的最后一个

println("可变参数函数计算结果\(sum(1,2,3,4,5,6,7,8,9))")


/*------------------默认参数的函数-----------------*/

func sayHi(msg:String, name : String ="Tom,") ->String  // name为函数的默认参数,需要传入时,需要像外部参数一样,传入参数名称

{

   return name + msg;

}


var msg_me ="welcome"

println("默认参数的函数\(sayHi(msg_me))")


var msg_name ="Jake "

println("默认参数函数传入参数\(sayHi(msg_me, name:msg_name))")


//默认参数的传入和外部参数一样,需要写出参数名 e.g. name

//若不想写默认参数的参数名,可以在前面加下划线+空格

func sayHiTo(msg:String,_ name :String ="Lily,")->String

{

   return name + msg;

}


println("不写默认函数的默认参数名\(sayHiTo(msg_me,msg_name))")


/*

*如果一个函数中既有默认参数,又有可变参数,则他们的次序应该为:可变参数位于参数表的最后面,而默认参数在次后面

*/



/*--------------------常量形参和变量形参------------------------*/

//函数的传入参数默认为常量形参,在函数内部不能进行任何改变形参值的操作,

//若要修改形参的值,需要使用var修饰传入形参,成为变量形参

func calcualte(a :Int) -> Int  // a没有var修饰,默认为常量形参

{

   var b = a +1;

   return a;

}


func calculate_num(var a :Int) ->Int // a有var修饰,为变量形参,在函数内部可以背修改

{

    a++;

   return a;

}


/*-------------------------In-Out形参----------------------------*/

// 使用inout类型修饰的参数,在函数内部的改变会影响原值的改变

// 和C/C++中的指针函数一样,会改变函数外的变量值

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

{

   let smp = a

    a = b;

    b = smp

}


var A =10;

var B =12

swap(&A, &B)  // 进过swap运算过之后,A和B变量的值交换了


println("swap之后 A =\(A) AND B =\(B)")


/*------------------------函数返回值类型-----------------------*/

// 函数的返回值为一个元组,也就是说,函数可以以元组的方式,有多个返回值

func area(width: Double, height:Double) -> (A:Double, C:Double)  

{

    var a = width * height

    var c = (width + height) *2

    return (A:a , C:c)

}


var Area = area(1.2,2.4)

println("矩形的面积为\(Area.A) AND周长为\(Area.C)")



func calculateScore(var mathScore:Double, var englishScore:Double) -> (math:Double, english:Double)

{

    mathScore *= 1.2

    englishScore *= 1.2

    return (math:mathScore, english:englishScore)

}


var score = calculateScore(90,85)

println("加分之后 Math =\(score.math) AND English =\(score.english)")


/*------------------------函数类型-----------------------*/

//函数作为变量

func addTwoNum(a: Int, b:Int) ->Int

{

    return a + b

}


func multiplayTwoNum(a: Int, b:Int) -> Int

{

    return a*b

}

// 声明了一个变量,其传入参数为(Int, Int),返回值类型 Int, 并将函数multiplayTwoNum初始化赋值给它

var calculateNum : (Int,Int) -> Int =multiplayTwoNum  

println(calculateNum(3,5))


//函数作为函数形参

func mathResult(calculateNum:(Int,Int) -> Int, a:Int, b:Int)

{

    println("计算结果:\(calculateNum(a, b))")

}


mathResult(multiplayTwoNum,2, 3)



//函数作为返回值

func squre(a: Int) ->Int

{

    return a*a

}


func cube(a: Int) ->Int

{

    return a*a*a

}


// type是函数getMathFunc的传入参数(外部参数,内部参数)

// 第一个->后面的是getMathFunc函数的返回值

// (Int) -> Int  这个表示一个函数, 此函数的形参类型为 (Int) , 而它的返回值为Int

func getMathFunc(#type: String) -> (Int) ->Int

{

    switch(type)

    {

        case "squ":

            returnsqure;

    default:

        return cube

    }

}


var mathFunc = getMathFunc(type:"squ")

println("获得的值为\(mathFunc(4))")


/*--------------------函数的重载--------------------*/

func test()

{

    println("无参数的test()函数")

}


func test(msg: String)

{

    println("有参数的test()函数,传入参数为\(msg)")

}


func test(#msg: String)

{

    println("有内部,外部参数的test()函数,传入参数为\(msg)")

}


func test(msg: String) ->String

{

    println("有参数的test()函数,传入参数 \(msg)带返回值")

    return msg

}


test()


var result :Void = test("Hello , Tom")  // 此处需要说明返回值类型,否则报错


var res :String = test("Hi, Jake"// 此处需要说明返回值类型,否则报错


test(msg: "Kake")


/*--------------------函数的闭包--------------------*/

var result: Int = {

    var result = 1

    for i in 1...$0

    {

        result *= $1

    }

    return result

}(2, 3)

// 使用$0 , $1, $2 表示输入参数的第一个,第二个,第三个.....

var calResult :(Int, Int) -> Int = {

    var result = 1;

    for i in 1...$1

    {

        result *= $0

    }

    return result

}


println(calResult(3,4))


你可能感兴趣的:(Swift基本语法(二)函数)