Swift 閉包表達式
閉包是功能性自包含模塊,可以在代碼中被傳遞和使用。 Swift 中的閉包與 C 和 Objective-C 中的 blocks 以及其他一些編程語言中的 lambdas 比較相似。
閉包的形式主要有三種:
1. 全局函數是一個有名字但不會捕獲任何值的閉包
</div> </div> 2. 嵌套函數是一個有名字并可以捕獲其封閉函數域內值的閉包
3. 閉包表達式是一個利用輕量級語法所寫的可以捕獲其上下文中變量或常量值的沒有名字的閉包
Swift 的閉包表達式擁有簡潔的風格,并鼓勵在常見場景中以實現語法優化,主要優化如下:
</div> </div>* 利用上下文推斷參數和返回值類型
</div> </div>* 單表達式(single-expression)閉包可以省略 return 關鍵字
* 參數名稱簡寫
* Trailing 閉包語法
嵌套函數:
var nums = [1,9,2,8] func testF(num1 : Int, num2 : Int) -> Bool{ return num1 > num2 } sort(&nums, testF) println(nums)//[9, 8, 2, 1]
沒有優化的閉包表達式:
var nums = [1,9,2,8] sort(&nums,{(num1:Int,num2:Int) -> Bool in //in 參數以及返回值與閉包主體的分割線 return num1 > num2 }) println(nums)//[9, 8, 2, 1]
簡化閉包函數表達式:(語法優化)
var nums = [1,9,2,8] sort(&nums,{(num1,num2) in //in 參數以及返回值與閉包主體的分割線 return num1 > num2 }) println(nums)//[9, 8, 2, 1]
再簡:
var nums = [1,9,2,8] sort(&nums,{ $0 > $1})//$0代表第一個參數,$1代表第二個參數 println(nums)//[9, 8, 2, 1]
再簡:
var nums = [1,9,2,8] sort(&nums,>)// 直接使用Swift的數組中的類型定義的關于大于號 (>) 的實現 func >(lhs: Int, rhs: Int) -> Bool println(nums)//[9, 8, 2, 1]
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!