Swift3.0 函數(shù)

Swift的統(tǒng)一的功能語法足夠靈活的播掷,可表達(dá)任何東西,無論是不帶參數(shù)名稱的簡單的樣式函數(shù)撼班,還是帶本地和外部參數(shù)名稱的復(fù)雜的Objective-C樣式方法歧匈。參數(shù)可為簡單函數(shù)調(diào)用提供默認(rèn)值,并且可以被作為輸入/輸出參數(shù)傳遞砰嘁,在函數(shù)執(zhí)行完成時(shí)修改傳遞來的變量件炉。

Swift中的每個(gè)函數(shù)都有一個(gè)類型勘究,包括函數(shù)的參數(shù)類型和返回類型。你可以像使用Swift中其他類型一樣使用該類型,這使得它很容易將函數(shù)作為參數(shù)傳遞給其他函數(shù),甚至從函數(shù)中返回函數(shù)類型斟冕。?函數(shù)也可以被寫入其他函數(shù)中以在函數(shù)作用于中封裝有用的功能口糕。

定義和調(diào)用函數(shù)

當(dāng)定義一個(gè)函數(shù)時(shí),可以選擇性的定義一個(gè)或者多個(gè)名稱磕蛇,類型值作為函數(shù)的輸入(稱為行參)走净,或者定義一個(gè)函數(shù)結(jié)束后返回值的類型(稱之為返回型)。每一個(gè)函數(shù)都有一個(gè)函數(shù)名孤里,用來描述函數(shù)的執(zhí)行任務(wù)。要使用一個(gè)函數(shù)時(shí)橘洞,可使用它的名稱進(jìn)行“調(diào)用”捌袜,并通過它的輸入值(稱為實(shí)參--argument)來匹配函數(shù)的參數(shù)類型。一個(gè)函數(shù)的實(shí)參(arguments)必須始終和函數(shù)形參(parameter)順序一致炸枣。

函數(shù)的形參和返回值

在swift中虏等,函數(shù)的形參和返回值是非常具有靈活性的∈食Γ可以定義任何事情霍衫,無論是一個(gè)簡單的僅有一個(gè)未命名形參的工具函數(shù),還是那種具有豐富的參數(shù)名稱和不同的形參選項(xiàng)的復(fù)雜函數(shù)侯养。

  • 多輸入形參
    函數(shù)可以有多個(gè)輸入形參敦跌,把它們寫到函數(shù)的括號內(nèi),并用逗號加以分隔逛揩。下面這個(gè)函數(shù)設(shè)置了一個(gè)半開區(qū)間的開始和結(jié)束索引柠傍,用來計(jì)算在范圍內(nèi)有多少元素:
    func halfOpenRangeLength(start: Int, end: Int) -> Int {
    return end - start
    }
    print(halfOpenRangeLength(start: 1, end: 10))

  • 無形參函數(shù)
    函數(shù)并沒有要求一定要定義的輸入形參。下面就是一個(gè)沒有輸入形參的函數(shù)辩稽,任何時(shí)候調(diào)用時(shí)惧笛,它總是返回相同的String消息:
    func sayHelloWorld() -> String {
    return "Hello, word"
    }
    print(sayHelloWorld())
    該函數(shù)的定義還需要在函數(shù)的名稱后跟一對兒圓括號,即使它不帶任何形參逞泄。當(dāng)函數(shù)被調(diào)用時(shí)患整,函數(shù)名稱也要跟著一對空括號。

  • 無返回值的函數(shù)
    函數(shù)不需要定義一個(gè)返回類型喷众。這里有一個(gè)版本的sayHello函數(shù)各谚,稱為waveGoogBye,他會(huì)打印自己的值侮腹,而不是返回它:
    func sayHelloWorld() -> String {
    return "Hello, word"
    }
    sayGoodbye(personName: "Autumn")
    因?yàn)樗⒉恍枰祷匾粋€(gè)值嘲碧,該函數(shù)的定義不包括返回箭頭(->)和返回類型。
    提示:嚴(yán)格地說父阻,sayGoodbye函數(shù)確實(shí)還返回一個(gè)值
    即使沒有定義返回值愈涩。
    沒有定義返回類型的函數(shù)返回了一個(gè)Void類型的特殊值望抽。
    這僅是一個(gè)空元組,這里邊沒有元素履婉,可以被寫成()煤篙。

  • 當(dāng)一個(gè)函數(shù)調(diào)用時(shí)他的返回值可以忽略不計(jì):
    print(sayHelloWorld())
    func printAndCount(stringToPrint: String) -> Int{
    print(stringToPrint)
    return stringToPrint.characters.count
    }
    func printWithoutCounting(stringToPrint: String) {
    print(printAndCount(stringToPrint: stringToPrint))
    }

  • 多返回值函數(shù)
    可以使用一個(gè)元祖類型作為函數(shù)的返回類型,來返回一個(gè)由多個(gè)值組成的復(fù)合返回值毁腿。
    func count(string: String) -> (vowels: Int, consonants: Int, others: Int) {
    var vowels = 0, consonants = 0, others = 0
    for character in string {
    switch String(character).lowercaseString {
    case "a", "e", "i", "o", "u":
    ++vowels
    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
    "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
    ++consonants
    default:
    ++others
    }
    }
    return (vowels, consonants, others)
    }

函數(shù)形參名

  • 外部形參名
    如果不添加外部形參名辑奈,本地形參名和外部形參名默認(rèn)是相同的,如果添加外部形參名已烤,則在函數(shù)外部顯示外部形參名鸠窗,內(nèi)部顯示內(nèi)部形參名。
    func googbye(personname name:String) -> String {
    return name
    }
    print(googbye(personname: "haha"))
  • 默認(rèn)形參值
    默認(rèn)形參值胯究,默認(rèn)放置在函數(shù)參數(shù)列表的末尾
    func join(s1:String,s2:String,joiner:String = " ") -> String {
    return s1+joiner+s2
    }
    有默認(rèn)值時(shí)稍计,可以不傳入joiner的值,但是如果有需要裕循,也可以傳
    print(join(s1: "1", s2: "2"))
    print(join(s1: "3", s2: "4", joiner: "+"))
  • 可變形參
    一個(gè)可變形參可接受零個(gè)或多個(gè)指定類型的值臣嚣。當(dāng)函數(shù)被調(diào)用時(shí),可以使用可變形參來指定--形參可以用來傳遞任意數(shù)量的輸入值剥哑」柙颍可通過在形參的類型名后邊插入三個(gè)點(diǎn)符號(...)來編寫可變形參。
    傳遞至可變形參的值在函數(shù)主體內(nèi)是以適當(dāng)類型的數(shù)組存在的株婴。例如,一個(gè)可變參數(shù)的名稱為numbers和類型為Double...在函數(shù)體內(nèi)就作為名為numbers類型為Double[]的常量數(shù)組怎虫。
    func arithmeticMean(numbers: Double...) -> Double {
    var total: Double = 0
    for numder in numbers {
    total += numder
    }
    return total/Double(numbers.count)
    }
    print(arithmeticMean(numbers: 1,2,3,4,5,6))
    // 函數(shù)最多可以有一個(gè)可變形參,而且它必須出現(xiàn)在參數(shù)列表的最后督暂,以避免使用多個(gè)形參調(diào)用函數(shù)引發(fā)歧義揪垄。
    如果你的函數(shù)有一個(gè)或多個(gè)帶有默認(rèn)值的形參,并且還有可變形參逻翁,請將可變形參放在所有默認(rèn)形參之后饥努,也就是列表的最末尾。

嵌套函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末八回,一起剝皮案震驚了整個(gè)濱河市酷愧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缠诅,老刑警劉巖溶浴,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異管引,居然都是意外死亡士败,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谅将,“玉大人漾狼,你說我怎么就攤上這事〖⒈郏” “怎么了逊躁?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隅熙。 經(jīng)常有香客問我稽煤,道長,這世上最難降的妖魔是什么囚戚? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任酵熙,我火速辦了婚禮,結(jié)果婚禮上驰坊,老公的妹妹穿的比我還像新娘绿店。我一直安慰自己,他們只是感情好庐橙,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著借嗽,像睡著了一般态鳖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恶导,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天浆竭,我揣著相機(jī)與錄音,去河邊找鬼惨寿。 笑死邦泄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裂垦。 我是一名探鬼主播顺囊,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蕉拢!你這毒婦竟也來了特碳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晕换,失蹤者是張志新(化名)和其女友劉穎午乓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闸准,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡益愈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夷家。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒸其。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敏释,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枣接,到底是詐尸還是另有隱情颂暇,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布但惶,位于F島的核電站耳鸯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膀曾。R本人自食惡果不足惜县爬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望添谊。 院中可真熱鬧财喳,春花似錦、人聲如沸斩狱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽所踊。三九已至泌枪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秕岛,已是汗流浹背碌燕。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留继薛,地道東北人修壕。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像遏考,于是被迫代替她去往敵國和親慈鸠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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