函數(shù)的定義
1.函數(shù)的格式
func + 函數(shù)名(參數(shù)1,參數(shù)2,……) + -> +返回值
func pi() -> Double {
?? ?return 3.14
}
func?pi(v1:Int, v2:Int)->Int{
print(v1+v2)
?? ?returnv1+v2
}
形參默認(rèn)是let,也只能是let
2.無(wú)返回值的寫法
func pi() ?{
? ?print("hello")
}
func pi() -> (){
?? ?print("hello")
}
func pi() -> void{
?? ?print("hello")
}
3.函數(shù)的隱式返回,即系有返回值,但是省略return也是可以的.但是整個(gè)函數(shù)體是一個(gè)單一表達(dá)式,那么函數(shù)會(huì)隱式返回整個(gè)表達(dá)式
func pi(num1:Int,num2:Int) -> Int {
?? ?num1 + num2
}
4.利用元祖實(shí)現(xiàn)多參數(shù)的返回,這個(gè)可以對(duì)比OC的block的多參數(shù)返回
func?math2(num1:Int, num2:Int) -> (num3:Int, num3:Int, num4:Int){
?? ?letnum5 = num1 + num2;
? ? return? (num5, num1-num2, num5 >>1)
}
5.參數(shù)的標(biāo)簽.標(biāo)簽的作用可以使得代碼更加易懂
func playGame(at time:String){
print("location is \(house)")
}
playGame(at : "09:30" )
可以使用下劃線,省略標(biāo)簽
func sum(_ v1 : Int, _v2:Int) -> Int{
v1+v2
}
sum(2,3)
6.給參數(shù)設(shè)定參數(shù)值
func sum(v1:Int = 10, v2:Int = 9) -> Int{
let v1+v2
}
sum()//輸出了19
需要注意的是swift底層是C++,C++參數(shù)是右往左邊設(shè)置的。但是swift是參數(shù)標(biāo)簽,就沒(méi)有這個(gè)限制。但是省略參數(shù)標(biāo)簽時(shí)候需要特別注意,避免出錯(cuò)。如下圖,在調(diào)用sum2(v2:10)時(shí)候,發(fā)現(xiàn)v2是不能省略參數(shù)標(biāo)簽的

7.可變參數(shù).

print其實(shí)就是個(gè)多參數(shù)的方法

一個(gè)函數(shù)最多只能有一個(gè)多參數(shù),而且緊跟在多參數(shù)后面的參數(shù)的標(biāo)簽不能省略
8.輸入輸出參數(shù)
可以用intout定義一個(gè)輸入輸出參數(shù):在函數(shù)內(nèi)部修改外部參數(shù)的值。類似OC的指針傳遞

9.函數(shù)的重載
規(guī)則:函數(shù)名相同
參數(shù)個(gè)數(shù),參數(shù)類型,參數(shù)標(biāo)簽不同算重載;返回值與函數(shù)重載無(wú)關(guān)

10.內(nèi)聯(lián)函數(shù)
將函數(shù)展開為函數(shù)體。如果開始了編譯器優(yōu)化,那么編譯器默認(rèn)會(huì)自動(dòng)把某些函數(shù)變?yōu)閮?nèi)聯(lián)函數(shù)

但是有些情況是不會(huì)變?yōu)閮?nèi)聯(lián)函數(shù)
函數(shù)體比較長(zhǎng)(造成代碼臃腫,代碼體積變大)
包含遞歸(死循環(huán))
動(dòng)態(tài)派發(fā)(多態(tài),例如父類和子類都有某個(gè)方法,編譯器在編譯階段不能確認(rèn)是當(dāng)前類在運(yùn)行時(shí)候執(zhí)行父類還是子類的方法)。
編譯器在release模式已經(jīng)開啟了內(nèi)聯(lián)模式,沒(méi)必要自己手動(dòng)去內(nèi)聯(lián)

11.函數(shù)作為函數(shù)的參數(shù)

12.函數(shù)作為函數(shù)的返回值。這種類型的函數(shù)叫做高階函數(shù)

13.給函數(shù)起別名

14.函數(shù)嵌套函數(shù)
