1. 程式人生 > >swift文件筆記(六) -- 函式

swift文件筆記(六) -- 函式

1.多重返回值函式

你可以用元組(tuple)型別讓多個值作為一個複合值從函式中返回

func minMax(array: [Int]) -> (min: Int, max: Int) {

     var currentMin = array[0]

     var currentMax = array[0]

     for value in array[1..<array.count] {

         if value < currentMin {

             currentMin = value

         } else if value > currentMax {

             currentMax = value

}

  } 

     return (currentMin, currentMax)

 }

let bounds = minMax(array: [8, -6, 2, 109, 3, 71])

print("min is \(bounds.min) and max is \(bounds.max)")

// 列印 "min is -6 and max is 109" 


2.函式引數標籤和引數名稱

每個函式引數都有一個引數標籤( argument label )以及一個引數名稱( parameter name )。引數標籤在呼叫函 數的時候使用;呼叫的時候需要將函式的引數標籤寫在對應的引數前面。引數名稱在函式的實現中使用。預設情況下,函式引數使用引數名稱來作為它們的引數標籤。


指定引數標籤

你可以在函式名稱前指定它的引數標籤,中間以空格分隔

func greet(person: String, from hometown: String) -> String {

    return "Hello \(person)!  Glad you could visit from \(hometown)."

} print(greet(person: "Bill", from: "Cupertino")) // 列印 "Hello Bill! Glad you could visit from Cupertino." 

忽略引數標籤

如果你不希望為某個引數新增一個標籤,可以使用一個下劃線( _

)來代替一個明確的引數標籤。

func someFunction(_ firstParameterName: Int, secondParameterName: Int) { // 在函式體內,firstParameterName secondParameterName 代表引數中的第一個和第二個引數值 

}

someFunction(1, secondParameterName: 2)


預設引數值

你可以在函式體中通過給引數賦值來為任意一個引數定義預設值(Deafult Value)。當預設值被定義後,呼叫這個函式時可以忽略這個引數。將不帶有預設值的引數放在函式引數列表的最前,一般來說,沒有預設值的引數更加的重要。

func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) { // 如果你在呼叫時候不傳第二個引數,parameterWithDefault 會值為 12 傳入到函式體中。 

 }

 someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6

 someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12

3.可變引數

一個可變引數(variadic parameter)可以接受零個或多個值。函式呼叫時,你可以用可變引數來指定函式引數可以被傳入不確定數量的輸入值。通過在變數型別名後面加入( ... )的方式來定義可變引數。一個函式最多隻能擁有一個可變引數。

 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) // 返回 3.0, 是這 5 個數的平均數。 arithmeticMean(3, 8.25, 18.75) // 返回 10.0, 是這 3 個數的平均數。 


4.輸入輸出引數

函式引數預設是常量。試圖在函式體中更改引數值將會導致編譯錯誤(compile-time error)。如果你想要一個函式可以修改引數的值,並且想要在這些修改在函式呼叫結束後仍然存在,那麼就應該把這個引數定義為輸入輸出引數(In-Out Parameters)。

在引數定義前加 inout 關鍵字,呼叫時在引數名前加&符。

func swapTwoInts(_ a: inout Int, _ b: inout Int)

}

swapTwoInts(&someInt, &anotherInt)

5.函式型別

每個函式都有特定的型別,由引數型別和返回值型別組成。

() -> Void ,叫“沒有引數,並返回 Void 型別的函式”。

(Int, Int) -> Int ,可以解讀為“這個函式型別有兩個 Int 型的引數並返回一個 Int 型的值。”。

可以用函式型別宣告常量變數,也能把函式型別作入參和返回值。


6.巢狀函式

到目前為止本章中你所見到的所有函式都叫全域性函式(global functions),它們定義在全域性域中。你也可以把函式定義在別的函式體中,稱作巢狀函式(nested functions)。

預設情況下,巢狀函式是對外界不可見的,但是可以被它們的外圍函式(enclosing function)呼叫。一個外圍函式也可以返回它的某一個巢狀函式,使得這個函式可以在其他域中被使用。