/**

 *创建函数

 * 参数是String,返回值是String。其中参数和返回值都是可选的,但是如果有参数,或者有return,则是必须的

 */

func sayHello(name:String)->String{

    return "Hello "+name+"."

}

println(sayHello("lane"))


func sayHelloOptional(name:String?)->String{

    var result = "Hello," + (name ?? "Guest")

    return result

}

var name:String?

println(sayHelloOptional(name))


/**

 *函数和元组

 * 参数是String,返回值是String。其中参数和返回值都是可选的

 */

func maxMinScores( scores:[Int] )->( maxScore:Int, minScore:Int)?{

    if scores.isEmpty{

        return nil

    }

    var curmax = scores[0]

    var curmin = scores[0]

    for score in scores[1..<scores.count]{

        curmax = max(curmax, score)

        curmin = min(curmin, score)

    }

   //两种返回方式

    return (maxScore:curmax, minScore:curmin)

   //两种返回方式

   //return (curmax, curmin)

}


var userScores:[Int]? = [12, 990, 572, 3258, 9999, 1204]

userScores=userScores?? []

if let maxMin = maxMinScores(userScores!){

    maxMin.maxScore

    maxMin.minScore

}


/**

 *值传递、引用、默认情况

 */

//默认下不能对参数修改,只能读取。此时参数被称为常数参数

func paramTest(varName:Int)->Int{

    var sum = varName*2;

   //报错,不能对参数修改,只能读

   //varName--;

    return sum

}

//值传递,可读可写,变量前面加一个var

func paramTest1(var varName:Int)->Int{

    var sum = varName*2;

   //这个时候下句不报错了。

    varName--;

    return sum

}

//引用,可读可写,变量前面加一个inout,使用时加&

func paramTest2(inout varName:Int)->Int{

    var sum = varName*2;

   //这个时候下句不报错了。

    varName--;

    return sum

}

var param = 10;

paramTest(param)

//param = 10

paramTest1(param)

//param = 10

paramTest2(&param)

//param = 9



/**

 *函数类型

 */

func add(a:Int, b:Int)->Int{

    return a+b

}

//隐式声明一个函数类型

let funcVar = add

add(3, 4)

//显式声明一个函数类型

let funcVar2:(Int, Int)->Int = add

//显式声明一个不需要参数和返回值的函数类型

func voidFunc(){

   println("hello world")

}

//let funcVar3:()->() = voidFunc

let funcVar4:()->Void = voidFunc


/**

 *函数嵌套

 */

func sum(a:Int, b:Int)->Int{

    func num(c:Int)->Int{

        return c*c

    }

    return num(a) + num(b)

}

sum(10, 20)


/**

 *返回函数类型的函数

 */

func func1(a:Int)->String{

    return "结果是"+String(a * a)

}

func func2(a:Int)->String{

    return "结果是"+String(a + a)

}

func choseFunc(a:Int)->(Int)->String{

    var result:(Int)->String

    if a%2==0 {

        result = func1

    }else{

        result = func2

    }

    return result

}

var funcName = choseFunc(10)

funcName(10)

funcName=choseFunc(5)

funcName(5)




标签: Swift, IOS

添加新评论