函数的概念:
函数是执行特定任务的代码自包含块。给定一个函数名称标识, 当执行其任务时就可以用这个标识来进行"调用"。
swift函数参数提供默认值,以简化函数调用,并通过设置在输入输出参数,在函数执行完成时修改传递的变量。
函数的声明、实现、调用:
语法:
func(函数声明关键字) 函数名(参数名称:参数数据类型,...)-> 返回数据类型{函数体}
注意:声明语法(若没返回值,->开始可以省略,没有参数,括号放空即可)
func sum(num1:Double,num2:Double)->Double
{
return num1 + num2
}
print(sum(10.5, num2: 20))
输出结果:
30.5
//无返回值
func fun (name:String)
{
if name .isEmpty
{
print("空字符串")
}
else
{
print("不是空字符串\(name)")
}
}
fun("张三") //调用函数
在swift中没有单独的函数声明,直接实现即可.
注意:在swift中函数调用要在实现之后,参数的传递个数类型匹配,有返回值要处理.
课堂练习:
自定义函数,实现给个值求阶乘,返回值输出。
//给一个值,求阶乘
func jiecheng(num:Double)->Double
{
var jiecheng:Double = 1
for var i:Double = 1 ; i <= num ; i++
{
jiecheng = jiecheng * i
}
return jiecheng
}
print(jiecheng(5))
输出:
120.0
Program ended with exit code: 0
自定义函数,求一个数的绝对值,返回并输出结果。
//求一个数的绝对值
func jueduizhi(var num:Double)->Double
{
if num < 0
{
num = -num
}
return num
}
print(jueduizhi(-9))
输出:
9.0
Program ended with exit code: 0
函数的参数:
函数的参数名有两种:内部参数名,外部参数名
内部参数名:即函数内部使用的参数名称
外部参数名:即函数在调用的时候的参数描述
例如:
//求一个数的绝对值absNum:外部参数 num:内部参数
func absFun (absNum num:Double)->Double
{
if num > 0 { return num }
return -num
}
//absNum:外部参数,描述参数的意义
print(absFun(absNum: 100))
函数的参数默认值:
/**
字符串拼接(str1拼接到str2后面)
- parameterstr1: 字符串1
- parameterstr2: str2给了默认一个空格的值
- returns: 拼接结果
*/
func joinStr (string str1:String,belowString str2:String = ":")->String
{
return "姓名" + str2 + str1
}
//有默认值,调用的时候可以不填写,外部参数也不要写
print(joinStr(string: "张三"))
这里的参数“str2”若调用时不进行赋值,则为默认值“:”,若要修改默认值可:
print(joinStr(string: "张三",str2: "="))
函数的参数在没有修饰符的情况下默认是let(只读),若在函数内部要修改参数值,则参数需要使用var。如下
//求一个数的绝对值absNum:外部参数 num:内部参数
func absFun (var absNum num:Double)->Double
{
if num < 0 {
num = -num
}
return num
}
var num1:Double = -100
//absNum:外部参数,描述参数的意义
print(absFun(absNum: num1))
print(num1)
函数参数 - 可变参数:
一个可变参数的参数接受零个或多个指定类型的值。当函数被调用时,您可以使用一个可变参数的参数来指定该参数可以传递不同数量的输入值。写可变参数的参数时,需要参数的类型名称后加上点字符(...)。
示例:
/**
求数学成绩平均值
- parameter scores: 一组数学成绩(可变参数)
- returns: 返回平均成绩
*/
func mathScoreAvg(scores: Double...) -> Double {
var total: Double = 0
for number in scores
{
total += number
}
return total / Double(scores.count)
}
print(mathScoreAvg(99,50.8,77,66.5,89))
函数参数 - 输入-输出参数:
前面所说的可变参数,只能在函数本身内改变。如果你想有一个函数来修改参数的值,并且想让这些变化要坚持在函数调用结束后,你可以定义输入-输出参数来代替。
通过在其参数定义的开始添加inout关键字写用来标明输入-输出参数。一个在输入-输出参数都有一个传递给函数的值,由函数修改后,并从函数返回来替换原来的值。
示例:求绝对值
//求一个数的绝对值absNum:外部参数 num:内部参数 inout:描述num是一个输入-输出参数
func absFun (inout absNum num:Double)->Double
{
if num < 0
{
num = -num
}
return num
}
var num1:Double = -100
//absNum:外部参数,描述参数的意义
print(absFun(absNum: &num1))//类似地址传参
print(num1)
函数类型:
在swift中每一个函数都有特定的函数类型,可以充当参数类型和函数的返回类型。
示例:
//加法函数
func sumTowInt(a:Int,b:Int)->Int
{
return a + b
}
//乘法函数
func mutiplyTowInt(a:Int,b:Int)->Int
{
return a * b
}
/** 带有函数参数的结果打印函数
- parameter funTowInt: 函数参数
- parameter a: 整形参数1
- parameter b: 整形参数2
*/
func printResult(funTowInt:(Int,Int)->Int,a:Int,b:Int)
{
print(funTowInt(a,b))
}
//存储函数的变量
var funTemp:(Int,Int)->Int = sumTowInt //加法
printResult(funTemp, a: 10, b: 20)funTemp = mutiplyTowInt//乘法
printResult(funTemp, a: 10, b: 20)
输出:
10
30
Program ended with exit code: 0
函数嵌套:
本章中遇到函数都是全局函数,在全局范围内定义。其实你还可以在其他函数中定义函数,被称为嵌套函数。
嵌套函数默认对外界是隐藏的,但仍然可以调用和使用其内部的函数。内部函数也可以返回一个嵌套函数,允许在嵌套函数内的另一个范围内使用。
//--------------嵌套函数--------------
/**前进或者后退
- parameter choose: true:前进 false:后退
- returns: 返回一个函数有整形参数,并且返回一个整形数据的函数
*/
func chooseStepFunction(choose:Bool)->(Int)->Int
{
//前进函数
func stepForward(input:Int)->Int
{
return input + 1
}
//后退函数
func stepBack(input:Int)->Int
{
return input - 1
}
return choose ? stepForward : stepBack //三目运算符
}
//函数变量
let f:(Int)->Int = chooseStepFunction(true)//前进
print(f(100))//内部函数调用
//声明函数变量并调用
print(chooseStepFunction(false)(100))//后退
输出:
10199
Program ended with exit code: 0
常见错误:
函数实现必须在调用之前,函数没有声明
函数实现的语法,参数语法,返回值语法
函数调用时注意参数严格一致,有返回值要处理
函数的参数没有指定修饰符,则为let不可变。
函数在适应输入输出参数时,是var类型 ,var不许要书写。
函数变量的声明,注意参数类型及返回值,语法