官术网_书友最值得收藏!

5.2 函數的類型與函數嵌套

前面的章節有提到,Swift語言中每一個函數都有其特定的類型。因此,開發者也可以像聲明普通變量那樣來聲明一個函數變量,同樣也可以對此變量進行賦值、調用等操作。將函數作為數據類型這種語言設計思路有強大的優勢,這將允許開發者將一個函數作為另一個函數的參數或者返回值,大大增強了編程的靈活性。

函數變量的聲明及賦值示例代碼如下:

     //聲明一個函數變量
     var addFunc:(Int,Int)->Int
     //對函數變量進行賦值
     addFunc = {(param1:Int,param2:Int) in return param1+param2}
     //調用函數變量
     addFunc(2,3)

函數變量的類型由參數和返回值決定,參數和返回值相同的函數類型就相同。上面的示例代碼中對函數變量的賦值采用了閉包的方式,閉包實質上是一段有具體功能的代碼塊,其結構為{(param1,param2,…) in代碼塊},其最外面由大括號包圍,內部小括號為參數列表,in為閉包關鍵字,之后需要編寫實現相應功能的代碼。關于閉包的更多內容,后面章節會詳細介紹。

也可以通過一個函數來對函數變量進行賦值,示例如下:

     var addFunc:(Int,Int)->Int
     func myFunc13(param1:Int,param2:Int) -> Int {
        return param2+param1
     }
     addFunc = myFunc13
     addFunc(1,2)

函數也可以作為另一個函數的參數,示例代碼如下:

     //參數param的類型為函數類型(Int,Int)->Int
     func myFunc14(param:(Int,Int)->Int) {
        print(param(1,2))
     }
     //將addFunc函數作為參數傳遞進myFunc14函數
     myFunc14(param: addFunc)

如以上代碼所示,這種將函數作為參數的編程方式應用十分廣泛,在Objective-C語言中,這種語法結構被稱為block。在處理一些回調操作時,例如網絡回調、子線程異步處理回調等場景中,使用這種編程方式將十分簡潔優美。

函數可以作為參數,也可以作為返回值來使用,示例代碼如下:

上面的演示代碼中,在函數內部創建了閉包并將其返回,由于Swift語言支持進行函數嵌套,因此開發者也可以在函數內部再次創建函數,示例如下:

提示

函數也有其作用域,所謂嵌套函數是指在函數內部再創建一個子函數,子函數只能在父函數內部調用,不可以在父函數外部調用,但是可以作為返回值傳遞到父函數外部。

主站蜘蛛池模板: 和静县| 依安县| 南雄市| 五华县| 西城区| 长丰县| 搜索| 南木林县| 临湘市| 海阳市| 天等县| 象山县| 峨边| 随州市| 东光县| 凯里市| 武清区| 大连市| 黄山市| 绵阳市| 历史| 改则县| 奉新县| 巴彦淖尔市| 秦安县| 铅山县| 英吉沙县| 申扎县| 杂多县| 大方县| 盐城市| 九龙县| 万年县| 当阳市| 博乐市| 清苑县| 武义县| 定州市| 青阳县| 凤山市| 安国市|