/**
*创建函数
* 参数是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(¶m)
//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)