Swift3.0 函數(shù)

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

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

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

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

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

在swift中,函數(shù)的形參和返回值是非常具有靈活性的??梢远x任何事情,無論是一個簡單的僅有一個未命名形參的工具函數(shù),還是那種具有豐富的參數(shù)名稱和不同的形參選項的復雜函數(shù)。

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

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

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

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

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

  • 外部形參名
    如果不添加外部形參名,本地形參名和外部形參名默認是相同的,如果添加外部形參名,則在函數(shù)外部顯示外部形參名,內(nèi)部顯示內(nèi)部形參名。
    func googbye(personname name:String) -> String {
    return name
    }
    print(googbye(personname: "haha"))
  • 默認形參值
    默認形參值,默認放置在函數(shù)參數(shù)列表的末尾
    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: "+"))
  • 可變形參
    一個可變形參可接受零個或多個指定類型的值。當函數(shù)被調(diào)用時,可以使用可變形參來指定--形參可以用來傳遞任意數(shù)量的輸入值??赏ㄟ^在形參的類型名后邊插入三個點符號(...)來編寫可變形參。
    傳遞至可變形參的值在函數(shù)主體內(nèi)是以適當類型的數(shù)組存在的。例如,一個可變參數(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ù)最多可以有一個可變形參,而且它必須出現(xiàn)在參數(shù)列表的最后,以避免使用多個形參調(diào)用函數(shù)引發(fā)歧義。
    如果你的函數(shù)有一個或多個帶有默認值的形參,并且還有可變形參,請將可變形參放在所有默認形參之后,也就是列表的最末尾。

嵌套函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容