Welcome to Swift (蘋果官方Swift文檔初譯與註解三十三)---235~240頁(第五章-- 函數)

來源:互聯網
上載者:User

標籤:style   使用   strong   os   for   re   

Default Parameter Values (參數預設值)

  在定義函數的時候,你可以給任何參數定義一個預設的值,如果定義了預設值,在調用這個函數的時候,你可以忽略這個參數.

  注意:

  設定參數預設值的時候,需要按照函數的參數列表最後的開始,這可以確保在調用函數的時候,即使沒預設值的參數也可以按順序的對應上,也使得函數在調用的時候更加清晰.

  下面的代碼例子是join函數的新版本,它使用了預設參數:

    func join(string s1: String, toString s2: String,

        withJoiner joiner: String = " ") -> String {

            return s1 + joiner + s2

  }

  如果在調用joiner函數的時候,設定了一個string的預設值,那麼這個值可以與另外一個字串拼接在一起:

    join(string: "hello", toString: "world", withJoiner: "-")

    // returns "hello-world”

  但是如果調用joiner的時候沒有設定預設值,系統將會使用一個空格代替:

    join(string: "hello", toString: "world")

    // returns "hello world”

External Names for Parameters with Default Values (預設值的副檔名)

  在多少情況下,對參數使用預設值的時候都需要提供副檔名.這樣可以明確參數的意義,尤其是在調用函數的時候.

  為了方便,在你沒有提供副檔名的時候,Swift提供了自動副檔名給定義的預設參數.這個自動副檔名與局部參數名相同,就好像你寫了一個#號在局部變數的前面.

  下面是join函數的的一個版本,它沒有提供參數的副檔名,但提供了預設值:

    func join(s1: String, s2: String, joiner: String = " ") -> String {

        return s1 + joiner + s2

    }

  在這種情況下,Swift自動的提供了一個擴充的參數名給有預設值的參數.因此在調用函數的時候,必須提供副檔名的參數,這使得函數的參數更加清楚和沒有歧義:

    join("hello", "world", joiner: "-")

    // returns "hello-world”

Variadic Parameters (可變參數)

  一個可變參數可以接收某種類型的0個或者多個值.在調用函數的時候,你可以使用可變參數來指定傳遞給函數的參數個數.可變參數的寫法是在參數類型名的前面插入三個點字元    (...).

  傳遞給可變參數的值可以在函數體內作為類似數組的類型使用.例如:

    func arithmeticMean(numbers: Double...) -> Double {

         var total: Double = 0

        for number in numbers {

            total += number

        }

        return total / Double(numbers.count)

    }

    arithmeticMean(1, 2, 3, 4, 5)

    // returns 3.0, which is the arithmetic mean of these five numbers

    arithmeticMean(3, 8, 19)

    // returns 10.0, which is the arithmetic mean of these three numbers

  注意:

  一個函數最多隻能有一個可變參數,並且必須在參數列表的最後面,這是為了避免在調用多個參數的函數的時候有歧義.

  如果你定義函數的有一個或者多個參數有預設值,也可以使用可變參數,只是要將它放在所有預設參數的最後面.

Constant and Variable Parameters (參數常量和參數變數)

  函數參數預設是常量,在函數內部試圖修改一個函數的參數值都會產生一個編譯錯誤.這就意味著你不能修改函數的參數.

  然而,有時候一個參數值的可變拷貝對函數是非常有用的,這樣你可以避免在定義一個新的變了在函數體內部.參數變數可以像使用變數而不是常量的方式來處理,並給它複製一個參數  值的新拷貝.

  定義參數變數是在參數名前面使用首碼的關鍵字:var

    func alignRight(var string: String, count: Int, pad: Character) -> String {

        let amountToPad = count - countElements(string)

        for _ in 1...amountToPad {

            string = pad + string

        }

        return string

    }

    let originalString = "hello"

    let paddedString = alignRight(originalString, 10, "-")

    // paddedString is equal to "-----hello"

    // originalString is still equal to "hello”

  這個例子定義了一個叫做alignRight的新函數,它將輸入的字串進行靠右對齊,在這個例子裡,字串‘hello’被轉換為’-----hello’.

  函數alignRight定義了參數變數string,這意味著string是可變的局部變數,可以使用傳遞的字串值進行初始化,也可以在函數體內進行修改使用.

  這個函數一開始先計算出有多少個字元需要添加到string的左邊來達到靠右對齊的效果.這個值被儲存在局部常量amountToPad中,然後函數添加amountToPad個數量的虛線字元在  string的左邊,最後返回結果.

  注意:

  可修改的參數變數作用範圍不能超過函數的末尾,並且對於函數之外,它們是不可見的.參數變數的生命期只存在於函數的調用周期.

 //******待續...*******//

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.