swift 函數(shù)定義

```

java :求和

public int add(int a,int b){

? ? return? a+b;

}

add(10,15);

```

Swift中函數(shù)的定義

```

function:功能 作用 函數(shù)

func 函數(shù)名(參數(shù)名1:參數(shù)類型圃验, 參數(shù)名2:參數(shù)類型…) -> 返回值類型 {

? ? 函數(shù)體…

? ? return 返回值

}

```

調(diào)用: 函數(shù)名(參數(shù)名:實參1,參數(shù)名:實參2)

```

有參有返回值的函數(shù)

func add(a:Int,b:Int)->Int{

? ? let sum = a + b

? ? return sum;

}

print(add(a:10,b:30))

```

常見的幾種函數(shù)類型

*無參無返回值

```

func test1()->Void{

? print("這是一個無參無返回值的函數(shù)")

}

test1()

func test2()->(){

? print("這是一個無參無返回值的函數(shù)")

}

test2()

func test3(){//最常用

? print("這是一個無參無返回值的函數(shù)")

}

test3()

*有參無返回值

func call(phoneNumber:String){

? ? print("給\(phoneNumber)打電話")

}

call(phoneNumber:"10001")

*無參有返回值

func getMsg()->String{

? ? return "這是一條來自9527的信息"

}

print(getMsg())

```

使用注意

```

1)函數(shù)的參數(shù)默認(rèn)都是let類型

2)返回值返回多個:可以用元組或者數(shù)組等

案例一

func say(info:String){

? info = "哈哈"

? print("傳入的信息:\(info)")

}

say(info:"今天是星期四")

案例二:定義一個函數(shù):找到數(shù)組里的最大值和最小值音念,然后返回

func getMaxAndMin(array:[Int])->(Int,Int){

? let min = array.min()

? let max = array.max()

? return (min!,max!)

}

var scores = [90,85,66,77]

let result = getMaxAndMin(array:scores)

print("最低分:\(result.0),最高分:\(result.1)")

```

內(nèi)部和外部參數(shù)名

```

總結(jié):

外部參數(shù)名是大名载庭,外面人喊(調(diào)用的時候用)强挫;

內(nèi)部參數(shù)名是小名榆芦,家里人喊(函數(shù)體中使用)

func minus1(a:Int,b:Int)->Int{

? ? return a - b

}

num1是外部參數(shù)名达椰,a叫內(nèi)部參數(shù)名;num2是外部參數(shù)名友绝,b叫內(nèi)部參數(shù)名;a,b在函數(shù)體中使用,num1芋绸、num2在調(diào)用的時候使用

func minus2(num1 a:Int,num2 b:Int)->Int{

? ? return a - b

}

_忽略外部參數(shù)名

func minus3(_ a:Int,num2 b:Int)->Int{

? ? return a - b

}

minus1(a:10,b:3)

minus2(num1:10,num2:3)

minus3(10,num2:3)

默認(rèn)參數(shù)

func order(item:String = "奶茶")->String{

? ? return "您點了\(item)"

}

```

調(diào)用時可以再次賦值媒殉,或者不處理

```

print(order(item:"面包"))

print(order())

```

思考:我們之前學(xué)過了哪個函數(shù),里面涉及了默認(rèn)參數(shù)摔敛?-print

```

print(1,2,3,4)

print(1,2,3,4,separator:"!",terminator:"?")

可變參數(shù)

使用場景:傳入的參數(shù)個數(shù)不確定的時候

通過在變量類型名后面加入(...)的方式來定義可變參數(shù)廷蓉。

一個函數(shù)最多只能擁有一個可變參數(shù)。

需求:求2個Int型數(shù)的和

需求:求3個Int型數(shù)的和

想法:能不能設(shè)計一個函數(shù)马昙,求任意個數(shù)的和桃犬?也就是這個函數(shù)的參數(shù)個數(shù)是不確定的。---》可變參數(shù)

func add(nums:Int...)->Int{

```

? ? 問題:如何使用nums這個可變參數(shù)行楞?

```

? ? print(type(of:nums))//可變參數(shù)當(dāng)成數(shù)組來處理

? ? var sum = 0

? ? for i in nums{

? ? ? ? sum += i

? ? }

? ? return sum

}

print(add(nums:10,20))

print(add(nums:10,20,30))

```

輸入輸出參數(shù)

```

引入:為什么需要輸入輸出參數(shù)

需求:定義一個swap函數(shù)攒暇,交換a\b兩個參數(shù)的值。

func swap1(a:Int,b:Int){

? ? let tmp = a

? ? a = b

? ? b = tmp

? ? print("a:\(a),b:\(b)")

}

swap1(a:10,b:30)

```

代碼報錯:默認(rèn)情況下參數(shù)都是let類型敢伸,你可以把值傳給他,不能改變

```

如果你想要一個函數(shù)可以修改參數(shù)的值恒削,并且想要在這些修改在函數(shù)調(diào)用結(jié)束后仍然存在池颈,那么就應(yīng)該把這個參數(shù)定義為輸入輸出參數(shù)(In-Out Parameters)尾序。

(1)定義一個輸入輸出參數(shù)時,使用 inout 關(guān)鍵字

(2)只能傳遞變量給輸入輸出參數(shù)躯砰,傳入常量或者字面量每币。需要在參數(shù)名前加 & 符,表示這個值可以被函數(shù)修改琢歇。

func swap2(a:inout Int,b:inout Int){

? ? let tmp = a

? ? a = b

? ? b = tmp

? ? print("a:\(a),b:\(b)")

}

var num1 = 10

var num2 = 30

swap2(a:&num1,b:&num2)

print("num1:\(num1),num2:\(num2)")

```

函數(shù)類型

```

每個函數(shù)都有種特定的函數(shù)類型兰怠,函數(shù)的類型由函數(shù)的參數(shù)類型和返回類型組成。

func add(a:Int,b:Int)->Int{

? ? return a+b

}

func minus(a:Int,b:Int)->Int{

? ? return a-b

}

這兩個函數(shù)的類型是: (Int, Int) -> Int李茫,可以解讀為:“這個函數(shù)有兩個 Int 型的參數(shù)并返回一個 Int 型的值”揭保。

func printHelloWorld() {

? ? print("hello, world")

}

printHelloWorld()函數(shù)的類型是: () -> Void,或者叫“沒有參數(shù)魄宏,并返回 Void 類型的函數(shù)”

```

函數(shù)類型的使用

```

使用場景一:把一個函數(shù)給常量或變量

此時 Swift 可以自動推斷其函數(shù)類型

var op = add //Swift可以推斷出op是一個函數(shù)秸侣,函數(shù)類型是(Int, Int) -> Int

print(op(10,30))//

op = minus

print(op(10,30))//minus(10,30)

使用場景二:函數(shù)作為參數(shù)

func printResult(a:Int,b:Int,mathFunc:(Int,Int)->Int){

? ? print(mathFunc(a,b))

}

printResult(a:10,b:20,mathFunc:add)

printResult(a:10,b:20,mathFunc:minus)

使用場景三:函數(shù)作為返回值

func getFunction(a:Int)->(Int,Int)->Int{

? ? if a>10{

? ? ? ? return add

? ? }else{

? ? ? ? return minus

? ? }

}

print(getFunction(a:12)(10,20))

print(getFunction(a:4)(10,20))

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宠互,隨后出現(xiàn)的幾起案子味榛,更是在濱河造成了極大的恐慌,老刑警劉巖予跌,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搏色,死亡現(xiàn)場離奇詭異,居然都是意外死亡券册,警方通過查閱死者的電腦和手機频轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汁掠,“玉大人略吨,你說我怎么就攤上這事】稼澹” “怎么了翠忠?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乞榨。 經(jīng)常有香客問我秽之,道長,這世上最難降的妖魔是什么吃既? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任考榨,我火速辦了婚禮,結(jié)果婚禮上鹦倚,老公的妹妹穿的比我還像新娘河质。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布掀鹅。 她就那樣靜靜地躺著散休,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乐尊。 梳的紋絲不亂的頭發(fā)上戚丸,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音扔嵌,去河邊找鬼限府。 笑死,一個胖子當(dāng)著我的面吹牛痢缎,可吹牛的內(nèi)容都是我干的胁勺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼牺弄,長吁一口氣:“原來是場噩夢啊……” “哼姻几!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起势告,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蛇捌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咱台,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體络拌,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年回溺,在試婚紗的時候發(fā)現(xiàn)自己被綠了春贸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡遗遵,死狀恐怖萍恕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情车要,我是刑警寧澤允粤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站翼岁,受9級特大地震影響类垫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琅坡,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一悉患、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榆俺,春花似錦售躁、人聲如沸坞淮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碾盐。三九已至,卻和暖如春揩局,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掀虎。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窥淆。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓钞馁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親二打。 傳聞我的和親對象是個殘疾皇子县忌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355