Swift 我的學習筆記 - 07: 函數

本文章純粹是中文版《The Swift Programming Language》的學習筆記,因此絕大部分的內容都是文中有的。本文是本人的學習筆記,不是正式系統的記錄。僅供參考html

如下仍是有不少沒看懂、不肯定的地方,我會以「存疑」的註解指出。編程

在此感謝中文版翻譯者,這極大地加快了 Swift 的學習速度。swift

本文地址:http://www.javashuo.com/article/p-ugbvcxff-hp.htmlsegmentfault


Reference:

原版:The Swift Programming Language
中文版:Swift 3 編程語言 - 函數app

函數的基本知識在序言已經講了,這裏不重複。只是提一下少數進階的功能。編程語言

可選返回類型

若是一個函數的返回值的任一部分有多是 nil,那麼須要加上問號。好比:函數

func someFunc (array: [Int]) -> (min: Int, max: Int)? {
        ...
    }

注意 (Int, Int)?(Int?, Int?) 的含義是不一樣的。學習

形參和實參

在 C 裏面,一個函數在聲明的時候,能夠只聲明函數參數的類型,而不聲明其名字。另外,也能夠在聲明的時候爲參數指定名字,使得語義更加明確。而在函數實際使用(定義)的時候,你能夠從新命名相應的參數名,便於實際的函數實現。在 Swift 中也支持這樣的寫法。ui

Swift 的聲明和定義其實是在一起的,因此你須要在定義的時候同時指定形式參數和實際參數。每個參數按照 「形式參數 實際參數: 類型」 的格式來寫。若是形式參數是空的,那麼就用 「_」 表示。這樣便於 IDE 識別。spa

好比有如下幾個寫法:

// 徹底沒有形式參數,很是的 C-style
    func isLeftGreaterThanRight(_ left: Int, _ right: Int) -> Bool {...}
    
    // 這個例子我以爲能夠說明形參和實參的區別所在,是否是很像 Objective-C 的方法名?
    func isNumber(_ left: Int, greaterThan right: Int) -> Bool {...}
    
    // 或者所有定義徹底,我的以爲這個定義比較瘋狂……
    func check(number left: Int, isGreaterThan right: Int) -> Bool {...}

可變參數

Swift 中的可變參數和 C 不同。C 的可變參數常常用於實現字符串填充功能(其實理論上是能夠作更多)。
可是 Swift 裏的可變參數實際上只是一個語法糖而已,其做用是將多個同類型的參數幫你拼接成 Array 類型做爲參數。使用 「...」 表示可變參數。好比:

func sum (numbers: Double) -> Double {
        var ret = 0.0
        for eachNum in numbers {
            ret += eachNum
        }
        return ret
    }

「輸入輸出」 形式參數

這裏相似於 C 裏面講到指針時的地址引用,使用的也是相同的例子:

func swap (_ a: inout Int, _ b: inout Int) {
        let temp = a
        a = b
        b = temp
    }

注意上面的 inout 關鍵字。調用的方法是:swap(&numA, &numB),是否是很像 C 裏的取地址?

變量類型:「函數」

就像 C 同樣,函數也能夠成爲一個變量類型。Swift 由於沒有函數指針的概念,因此函數類型的定義實際上變得很明確。
好比函數 func someFunc(_ a: Int, _ b: Int) -> Int{...} 的類型就是 (Int, Int) -> Int。這就是一個數據類型了,稱爲 「函數類型」,能夠用來定義變量!好比:

var someFuncVal : (Int, Int) -> Int = someFunc

調用的方式是:someFuncVal(1, 2),比 C 裏還要糾結 「*」 號好多了!
函數類型的變量也可能用來做爲函數變量或者是函數返回值,這個時候就會出現不少個 「->」。這裏就不展開了,我隱約嗅到了混亂 Swift 的味道……

函數內嵌

函數的內部能夠再定義一個函數,有點像 Objective-C 裏面的 「代碼塊」 的做用。這裏也很好理解,不展開

相關文章
相關標籤/搜索