- Swift 4從零到精通iOS開(kāi)發(fā)
- 張益琿
- 674字
- 2019-12-09 14:31:25
5.2 函數(shù)的類型與函數(shù)嵌套
前面章節(jié)有提到,Swift語(yǔ)言中每一個(gè)函數(shù)都有其特定的類型。因此,開(kāi)發(fā)者也可以像聲明普通變量那樣來(lái)聲明一個(gè)函數(shù)變量,同樣也可以對(duì)此變量進(jìn)行賦值、調(diào)用等操作。將函數(shù)作為數(shù)據(jù)類型這種語(yǔ)言設(shè)計(jì)思路有強(qiáng)大的優(yōu)勢(shì),這將允許開(kāi)發(fā)者將一個(gè)函數(shù)作為另一個(gè)函數(shù)的參數(shù)或者返回值,大大增強(qiáng)了編程的靈活性。
函數(shù)變量的聲明及賦值示例代碼如下:
//聲明一個(gè)函數(shù)變量 var addFunc:(Int,Int)->Int //對(duì)函數(shù)變量進(jìn)行賦值 addFunc = {(param1:Int,param2:Int) in return param1+param2} //調(diào)用函數(shù)變量 addFunc(2,3)
函數(shù)變量的類型由參數(shù)和返回值決定,參數(shù)和返回值相同的函數(shù)類型就相同。上面示例代碼中對(duì)函數(shù)變量的賦值采用了閉包的方式,閉包的實(shí)質(zhì)是一段有具體功能的代碼塊,其結(jié)構(gòu)為{(param1,param2,…) in代碼塊},其最外面由大括號(hào)包圍,內(nèi)部小括號(hào)為參數(shù)列表,in為閉包關(guān)鍵字,之后需要編寫實(shí)現(xiàn)相應(yīng)功能的代碼。關(guān)于閉包的更多內(nèi)容,后面章節(jié)會(huì)詳細(xì)介紹。
也可以通過(guò)一個(gè)函數(shù)來(lái)對(duì)函數(shù)變量進(jìn)行賦值,示例如下:

函數(shù)也可以作為另一個(gè)函數(shù)的參數(shù),示例代碼如下:

如上代碼所示,這種將函數(shù)作為參數(shù)的編程方式應(yīng)用十分廣泛,在Objective-C語(yǔ)言中,這種語(yǔ)法結(jié)構(gòu)被稱為block。在處理一些回調(diào)操作時(shí),例如網(wǎng)絡(luò)回調(diào)、子線程異步處理回調(diào)等場(chǎng)景中,使用這種編程方式將十分簡(jiǎn)潔優(yōu)美。
函數(shù)可以作為參數(shù),同樣其也可以作為返回值來(lái)使用,示例代碼如下:

上面的演示代碼中,在函數(shù)內(nèi)部創(chuàng)建了閉包并將其返回,由于Swift語(yǔ)言是支持進(jìn)行函數(shù)嵌套的,實(shí)際上開(kāi)發(fā)者也可以在函數(shù)內(nèi)部再次創(chuàng)建函數(shù),示例如下:

提示
函數(shù)也有其作用域。所謂嵌套函數(shù),是指在函數(shù)內(nèi)部再次創(chuàng)建一個(gè)子函數(shù),子函數(shù)只能在父函數(shù)內(nèi)部調(diào)用,不可以在父函數(shù)外部調(diào)用,但是可以作為返回值傳遞到父函數(shù)外部。
- DB2 V9權(quán)威指南
- 數(shù)據(jù)庫(kù)系統(tǒng)原理及MySQL應(yīng)用教程(第2版)
- AngularJS入門與進(jìn)階
- jQuery Mobile Web Development Essentials(Third Edition)
- OpenDaylight Cookbook
- ReSharper Essentials
- Visual Basic程序開(kāi)發(fā)(學(xué)習(xí)筆記)
- 程序員面試算法寶典
- R語(yǔ)言數(shù)據(jù)可視化實(shí)戰(zhàn)
- Python金融數(shù)據(jù)分析
- Flash CS6中文版應(yīng)用教程(第三版)
- 單片機(jī)應(yīng)用技術(shù)
- 高級(jí)語(yǔ)言程序設(shè)計(jì)(C語(yǔ)言版):基于計(jì)算思維能力培養(yǎng)
- 從零開(kāi)始學(xué)C#
- 響應(yīng)式Web設(shè)計(jì):HTML5和CSS3實(shí)戰(zhàn)(第2版)