7 函數(shù)——《Swift3.0從入門到出家》原創(chuàng)連載

7 函數(shù)——《Swift3.0從入門到出家》

函數(shù)

函數(shù)就是對某個功能的封裝穷当,一個swift程序可能由多個函數(shù)組成

swift中定義函數(shù)的格式:

func 函數(shù)名稱(參數(shù)列表) —>函數(shù)返回值類型{

函數(shù)體

return 

}

函數(shù)定義要素:

func是定義函數(shù)的關(guān)鍵字

函數(shù)名名字:為了增強(qiáng)可讀性,函數(shù)的名稱只能用字母字符來命名,函數(shù)名稱以駝峰式命名法來命名

參數(shù)列表:可以帶多個參數(shù)认轨,也可以沒有參數(shù)

如果帶有多個參數(shù),格式為:參數(shù)名稱:類型標(biāo)注,參數(shù)名稱:類型標(biāo)注…

如果函數(shù)帶有多個參數(shù),調(diào)用函數(shù)的時候遥皂,向函數(shù)傳遞的數(shù)據(jù),類型必須要和定義參數(shù)的類型完全對應(yīng)

函數(shù)返回值類型:只要是Swift語言識別的類型刽漂,都可以作為函數(shù)的返回值類型

如果函數(shù)具有返回值 返回的內(nèi)容用return語句返回

return語句后面可以添加變量或者表達(dá)式

如果函數(shù)不具有返回值 return語句可以缺省

有以下三種寫法:

  1. ->返回值類型 同時缺省

  2. 寫成 ->()

  3. 寫成 ->Void

函數(shù)優(yōu)點:

讓代碼更具有模塊化演训,提高代碼的可讀性

讓代碼更容易修改和維護(hù)

增強(qiáng)代碼的復(fù)用性


無返回值,無參數(shù)函數(shù)

func printLine() -> String{

return “—————-”

}

 

print(printLine())

例子1:求取a + b的和贝咙,a = 10仇祭,b = 20


func sumNumber(){

let a  = 10

let b = 20

print(a + b)

}

sumNumber() //調(diào)用函數(shù)

MARK

  • 函數(shù)只有在調(diào)用的時候才會為函數(shù)中的變量和常量分配空間

  • 函數(shù)如果一直沒有被調(diào)用,和沒有定義一樣颈畸,函數(shù)里的變量或常量都不占內(nèi)存

  • 函數(shù)體重定義的常量和變量乌奇,生命周期從函數(shù)調(diào)用開始没讲,到函數(shù)調(diào)用結(jié)束為止,作 用域只在函數(shù)體內(nèi)

  • 向例子1中定義的變量或者常量礁苗,我們稱為局部變量或者局部常量

  • 全局變量的作用域爬凑,從定義位置開始,到下面的所有函數(shù)都能直接使用這個全部變量

帶參數(shù)试伙,無返回值函數(shù)

函數(shù)的參數(shù)默認(rèn)為隱式常量嘁信,在函數(shù)內(nèi)部不能進(jìn)行賦值操作,函數(shù)形參的作用只是用來接收調(diào)用函數(shù)時傳遞過來的數(shù)值

例子2:

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

a + b

}

sumAAndB(10,b:20)//調(diào)用函數(shù)

例子3:判斷從鍵盤輸入的字符是否為十六進(jìn)制的合法字符

func isNum(b: String){

    if b.characters.count == 1{

        let b = b[b.startIndex]

        if b >= "0" && b <= "9" || b >= "a" && b <= "f" || b >= "A" && b <= "F"{

            print("這個數(shù)是十六進(jìn)制的字符")

        }else{

            print("這個數(shù)不是十六進(jìn)制的字符")

        }

    }else{

        print("不合法")

    }

}

isNum(“k”) 調(diào)用函數(shù)

函數(shù)參數(shù)為多個不定項數(shù)據(jù)

如果函數(shù)參數(shù)個數(shù)不定疏叨,可以使用…格式來接收多個數(shù)據(jù)潘靖,相當(dāng)于接收一個數(shù)組

參數(shù)位置不定數(shù)據(jù)的參數(shù)只能定義一個

不定數(shù)據(jù)放在所有參數(shù)后面定義

例子4:

    func getMoreNumber(num:Int…){

        for i in num{

            print(i)

        }

    }

調(diào)用函數(shù)
getMoreNumber(1,2,3)
打印結(jié)果

1

2

3 

帶參數(shù),有返回值函數(shù)

例子5:


func sayGoodBye(personName: String,isSay: Bool) ->String{

    if isSay{

        return "我們已經(jīng)認(rèn)識了"

    }else{

        return sayHello(personName)

        //函數(shù)遇到return語句就結(jié)束了蚤蔓,return后面的內(nèi)容不會被執(zhí)行

    }

}

print(sayGoodBye("Kil", isSay: false))

如果函數(shù)的返回值存在不確定值卦溢,那么函數(shù)就要將返回值類型定義成可選類型:Int?返回值返回的為nil

例子6:


func divNum(a: Int,b: Int) -> Int?{

    if b != 0{

    return a / b

    }else{

        return nil

    }

}

print(divNum(4, b: 0))

函數(shù)內(nèi)部實現(xiàn)改變函數(shù)外部參數(shù)的值

定義函數(shù)時的參數(shù)稱為形參秀又,函數(shù)調(diào)用傳遞的參數(shù)单寂,稱為實參,inout參數(shù)實現(xiàn)了形參的值能被修改的功能

例子7:交換兩個數(shù)的值


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

         let tmp = a

         a = b
    
         b = tmp

    }

調(diào)用函數(shù)


var m = 10

var n = 30

swap(&m, b: &n)

print(m,n)

實參向形參傳遞數(shù)值吐辙,我們稱之為值傳遞宣决,值傳遞是不能修改實參的值的

實參向形參傳遞地址,我們稱之為地址傳遞昏苏,地址傳遞可以修改實參的值

例子8:編寫一個函數(shù)尊沸,函數(shù)傳入一個無序的整形數(shù)組,函數(shù)無返回值贤惯,函數(shù)的功能是講傳入的數(shù)組實現(xiàn)從小到大排序


func sort(inout a: [Int]){

   a.sortInPlace()

}

調(diào)用函數(shù)

var arr = [1,5,3,23,65,23,12]

sort(&arr)

print(arr)

外部參數(shù)與函數(shù)類型

func getPan(width: Int,height: Int) ->Int {

    return (width + height) * 2
}

調(diào)用函數(shù)

print(getPan(10, height: 20))//此處的height就是隱式的外部參數(shù)洼专,因為此處的外部參數(shù)和內(nèi)部參數(shù)是同一個

**內(nèi)部參數(shù)就是離冒號近的參數(shù)名稱,用于參與函數(shù)內(nèi)部運(yùn)算

外部參數(shù)就是離冒號遠(yuǎn)的參數(shù)名稱救巷,用于函數(shù)調(diào)用時增強(qiáng)代碼的可讀性**,如:

func getArea(寬 width: Int,高 height: Int)->Int {

     return  width * height

}

此處的寬句柠、高就是外部參數(shù)

外部參數(shù)名稱缺省

func personInfo(name: String, _ age: Int) ->String//用_ 代表外部參數(shù)缺省

{

return name + "\(age)"
}

調(diào)用函數(shù)

print(personInfo("小明", 19))

參數(shù)帶有默認(rèn)值

func shape(width: Int = 100) { 

     print(width * width)

}

函數(shù)的參數(shù)默認(rèn)是隱式常量浦译,在函數(shù)體內(nèi)不能賦值,但是可以在定義參數(shù)的同時直接初始化

函數(shù)的重載

程序中定義多個同名函數(shù)溯职,函數(shù)的返回值類型或者函數(shù)的參數(shù)列表不同精盅,這種形式稱為函數(shù)重載

原函數(shù):

func getStudentInfo(name: String) {    

     print(name)

}

函數(shù)重載1:函數(shù)名相同,參數(shù)列表不同

func getStudentInfo(name: String,age: Int) {

    print(name + "\(age)")

}

函數(shù)重載2:函數(shù)名相同谜酒,參數(shù)列表相同叹俏,函數(shù)返回值不同

func getStudentInfo(name: String) ->String {

     return name

}

拓展閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市僻族,隨后出現(xiàn)的幾起案子粘驰,更是在濱河造成了極大的恐慌屡谐,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝌数,死亡現(xiàn)場離奇詭異愕掏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顶伞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門饵撑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唆貌,你說我怎么就攤上這事滑潘。” “怎么了锨咙?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵语卤,是天一觀的道長。 經(jīng)常有香客問我蓖租,道長粱侣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任蓖宦,我火速辦了婚禮齐婴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稠茂。我一直安慰自己柠偶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布睬关。 她就那樣靜靜地躺著诱担,像睡著了一般。 火紅的嫁衣襯著肌膚如雪电爹。 梳的紋絲不亂的頭發(fā)上蔫仙,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音丐箩,去河邊找鬼摇邦。 笑死,一個胖子當(dāng)著我的面吹牛屎勘,可吹牛的內(nèi)容都是我干的施籍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼概漱,長吁一口氣:“原來是場噩夢啊……” “哼丑慎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤竿裂,失蹤者是張志新(化名)和其女友劉穎玉吁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铛绰,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诈茧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捂掰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敢会。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖这嚣,靈堂內(nèi)的尸體忽然破棺而出鸥昏,到底是詐尸還是另有隱情,我是刑警寧澤姐帚,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布吏垮,位于F島的核電站,受9級特大地震影響罐旗,放射性物質(zhì)發(fā)生泄漏膳汪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一九秀、第九天 我趴在偏房一處隱蔽的房頂上張望遗嗽。 院中可真熱鬧,春花似錦鼓蜒、人聲如沸痹换。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娇豫。三九已至,卻和暖如春畅厢,著一層夾襖步出監(jiān)牢的瞬間冯痢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工框杜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留浦楣,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓霸琴,卻偏偏與公主長得像椒振,于是被迫代替她去往敵國和親昭伸。 傳聞我的和親對象是個殘疾皇子梧乘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容