Swift3.0 函數

Swift的統一的功能語法足夠靈活的,可表達任何東西,無論是不帶參數名稱的簡單的樣式函數,還是帶本地和外部參數名稱的復雜的Objective-C樣式方法。參數可為簡單函數調用提供默認值,并且可以被作為輸入/輸出參數傳遞,在函數執行完成時修改傳遞來的變量。

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

定義和調用函數

當定義一個函數時,可以選擇性的定義一個或者多個名稱,類型值作為函數的輸入(稱為行參),或者定義一個函數結束后返回值的類型(稱之為返回型)。每一個函數都有一個函數名,用來描述函數的執行任務。要使用一個函數時,可使用它的名稱進行“調用”,并通過它的輸入值(稱為實參--argument)來匹配函數的參數類型。一個函數的實參(arguments)必須始終和函數形參(parameter)順序一致。

函數的形參和返回值

在swift中,函數的形參和返回值是非常具有靈活性的。可以定義任何事情,無論是一個簡單的僅有一個未命名形參的工具函數,還是那種具有豐富的參數名稱和不同的形參選項的復雜函數。

  • 多輸入形參
    函數可以有多個輸入形參,把它們寫到函數的括號內,并用逗號加以分隔。下面這個函數設置了一個半開區間的開始和結束索引,用來計算在范圍內有多少元素:
    func halfOpenRangeLength(start: Int, end: Int) -> Int {
    return end - start
    }
    print(halfOpenRangeLength(start: 1, end: 10))

  • 無形參函數
    函數并沒有要求一定要定義的輸入形參。下面就是一個沒有輸入形參的函數,任何時候調用時,它總是返回相同的String消息:
    func sayHelloWorld() -> String {
    return "Hello, word"
    }
    print(sayHelloWorld())
    該函數的定義還需要在函數的名稱后跟一對兒圓括號,即使它不帶任何形參。當函數被調用時,函數名稱也要跟著一對空括號。

  • 無返回值的函數
    函數不需要定義一個返回類型。這里有一個版本的sayHello函數,稱為waveGoogBye,他會打印自己的值,而不是返回它:
    func sayHelloWorld() -> String {
    return "Hello, word"
    }
    sayGoodbye(personName: "Autumn")
    因為它并不需要返回一個值,該函數的定義不包括返回箭頭(->)和返回類型。
    提示:嚴格地說,sayGoodbye函數確實還返回一個值
    即使沒有定義返回值。
    沒有定義返回類型的函數返回了一個Void類型的特殊值。
    這僅是一個空元組,這里邊沒有元素,可以被寫成()。

  • 當一個函數調用時他的返回值可以忽略不計:
    print(sayHelloWorld())
    func printAndCount(stringToPrint: String) -> Int{
    print(stringToPrint)
    return stringToPrint.characters.count
    }
    func printWithoutCounting(stringToPrint: String) {
    print(printAndCount(stringToPrint: stringToPrint))
    }

  • 多返回值函數
    可以使用一個元祖類型作為函數的返回類型,來返回一個由多個值組成的復合返回值。
    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)
    }

函數形參名

  • 外部形參名
    如果不添加外部形參名,本地形參名和外部形參名默認是相同的,如果添加外部形參名,則在函數外部顯示外部形參名,內部顯示內部形參名。
    func googbye(personname name:String) -> String {
    return name
    }
    print(googbye(personname: "haha"))
  • 默認形參值
    默認形參值,默認放置在函數參數列表的末尾
    func join(s1:String,s2:String,joiner:String = " ") -> String {
    return s1+joiner+s2
    }
    有默認值時,可以不傳入joiner的值,但是如果有需要,也可以傳
    print(join(s1: "1", s2: "2"))
    print(join(s1: "3", s2: "4", joiner: "+"))
  • 可變形參
    一個可變形參可接受零個或多個指定類型的值。當函數被調用時,可以使用可變形參來指定--形參可以用來傳遞任意數量的輸入值。可通過在形參的類型名后邊插入三個點符號(...)來編寫可變形參。
    傳遞至可變形參的值在函數主體內是以適當類型的數組存在的。例如,一個可變參數的名稱為numbers和類型為Double...在函數體內就作為名為numbers類型為Double[]的常量數組。
    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))
    // 函數最多可以有一個可變形參,而且它必須出現在參數列表的最后,以避免使用多個形參調用函數引發歧義。
    如果你的函數有一個或多個帶有默認值的形參,并且還有可變形參,請將可變形參放在所有默認形參之后,也就是列表的最末尾。

嵌套函數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容