函数的定义
1.函数的格式
func + 函数名(参数1,参数2,……) + -> +返回值
func pi() -> Double {
return 3.14
}
func pi(v1:Int, v2:Int)->Int{
print(v1+v2)
returnv1+v2
}
形参默认是let,也只能是let
2.无返回值的写法
func pi() {
print("hello")
}
func pi() -> (){
print("hello")
}
func pi() -> void{
print("hello")
}
3.函数的隐式返回,即系有返回值,但是省略return也是可以的.但是整个函数体是一个单一表达式,那么函数会隐式返回整个表达式
func pi(num1:Int,num2:Int) -> Int {
num1 + num2
}
4.利用元祖实现多参数的返回,这个可以对比OC的block的多参数返回
func math2(num1:Int, num2:Int) -> (num3:Int, num3:Int, num4:Int){
letnum5 = num1 + num2;
return (num5, num1-num2, num5 >>1)
}
5.参数的标签.标签的作用可以使得代码更加易懂
func playGame(at time:String){
print("location is \(house)")
}
playGame(at : "09:30" )
可以使用下划线,省略标签
func sum(_ v1 : Int, _v2:Int) -> Int{
v1+v2
}
sum(2,3)
6.给参数设定参数值
func sum(v1:Int = 10, v2:Int = 9) -> Int{
let v1+v2
}
sum()//输出了19
需要注意的是swift底层是C++,C++参数是右往左边设置的。但是swift是参数标签,就没有这个限制。但是省略参数标签时候需要特别注意,避免出错。如下图,在调用sum2(v2:10)时候,发现v2是不能省略参数标签的
7.可变参数.
print其实就是个多参数的方法
一个函数最多只能有一个多参数,而且紧跟在多参数后面的参数的标签不能省略
8.输入输出参数
可以用intout定义一个输入输出参数:在函数内部修改外部参数的值。类似OC的指针传递
9.函数的重载
规则:函数名相同
参数个数,参数类型,参数标签不同算重载;返回值与函数重载无关
10.内联函数
将函数展开为函数体。如果开始了编译器优化,那么编译器默认会自动把某些函数变为内联函数
但是有些情况是不会变为内联函数
函数体比较长(造成代码臃肿,代码体积变大)
包含递归(死循环)
动态派发(多态,例如父类和子类都有某个方法,编译器在编译阶段不能确认是当前类在运行时候执行父类还是子类的方法)。
编译器在release模式已经开启了内联模式,没必要自己手动去内联
11.函数作为函数的参数
12.函数作为函数的返回值。这种类型的函数叫做高阶函数
13.给函数起别名
14.函数嵌套函数
网友评论