引言:函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候“调用”这个函数来完成它的任务。
定义:
1. func creatBoy(name:String) -> Void {
//所执行的代码块
print(name)
}
解析: 1.func 为一段函数的必备开头
2.creatBoy 为函数的名称,用于调用
3.name 为入参名称
4.Void 代表返回值为空,无返回值(也可为其他类型)
2. 当返回值为空可简写为:
func creatBoy(name:String){
//所执行的代码块
print(name)
}
使用
self.creatBoy(name: "浩然")
creatBoy(name: "浩然")
两者结果一样,后者是仅限在本类代码中调用
以下文章会以参数、返回值作为讲解重点
参数:
(1)参数数量:
一个函数可以有单个参数、多个参数或者无参数,单个参数定义上面已演示
多个入参:
func creatBoy(name:String,age:Int) -> Void {
//所执行的代码块
print(name)
}
代表该函数有name、age两个参数,多个参数写法就是在入参后面加上,
调用时:creatBoy(name: "浩然",age:3)
无入参
func creatBoy() -> Void {
//所执行的代码块
}
(2)参数标签
参数标签可以分为指定参数标签和隐式参数标签
1.指定参数标签如:
func creatBoy(name string:String,age:Int) -> Void {
//所执行的代码块
print(string)
}
调用:creatBoy(name: "浩然", age: 3) 输出为:浩然
解析:在原有的参数前面加上一个名称,两者用空格隔开,在调用时入参名称为name,在函数代码块内部调用时,参数名称为string
2.忽略参数标签如:
func creatBoy(_ string:String,age:Int) -> Void {
//所执行的代码块
print(string)
}
调用:creatBoy("浩然", age: 3),输出为:浩然
解析:在原有的参数前面加上一个"_",两者用空格隔开,在调用时无需显示入参名称,在函数代码块内部调用时,参数名称为string
(3)参数默认值:在书写函数时,一开始就可以对参数进行默认赋值,若在调用函数时该参数不传值,则在函数内部使用该参数的默认值,如:
func creatBoy(_ string:String,age:Int = 3) -> Void {
//所执行的代码块
print("\(string),\(age)")
}
调用:creatBoy("浩然"),输出为:浩然,3
调用:creatBoy("浩然",age=10),输出为:浩然,10
解析:在调用时由于函数参数age有默认值,则可在调用时无需声明,若声明则函数内部使用声明值
(4)参数可为空标记:在书写函数时,可对参数后缀加"?",代表在调用函数时,该入参可为nil,如:
func creatBoy(_ string:String,age:Int?) -> Void {
//所执行的代码块
print("\(string),\(age as Any)")
}
调用:creatBoy("浩然", age: nil),输出为:浩然,nil
(5)输入输出参数
通常函数内的入参都是被当做常量,在函数内无法被修改,尝试修改的话会编译报错.
如果你想在函数内修改该入参并且在函数执行完毕后依然保存,那么你可以将该入参修饰为"输入输出参数".如:
var num = 2
xiugai(num: &num)
print(num)
func xiugai(num: inout Int) -> Int {
num = num + 2
return num
}
打印结果为:4,说明num已在函数内部进行改变
解析:函数内部改变入参,需要在参数类型前用"inout"进行修饰,并且在调用该函数时,入参需要用&进行修饰,且只能传入对象,不可直接赋值
返回值
函数可以返回任意类型的返回值,也可无返回值(无返回值上面已演示),下面演示有返回值的,如返回普通类型:String、Boold等:
func creatBoy(_ string:String,age:Int) -> String {
return String(format: "我的名字:%@,年龄:%ld", string,age)
}
调用: let str = creatBoy("浩然", age: 3)
print(str)
输出为:我的名字:浩然,年龄:3
返回特殊类型:函数,又名嵌套函数,如:
func creatBoyAge(age:Int) -> (Int)->Int {
func addAge(ageNum:Int) -> Int {return ageNum+1}
func reduceAge(ageNum:Int) -> Int {return ageNum-1}
return age > 5 ? reduceAge : addAge
}
调用: var age = 10
let changeAge = creatBoyAge(age: age)
while age != 5 {
print(age)
age = changeAge(age)
}
print("结束")
输出为:10 9 8 7 6 结束
解析:在creatBoyAge定义时,返回值是:入参为Int,返回值为Int的函数