Swift学习笔记 闭包表达式
? ? ? 閉包是功能性自包含模塊,可以在代碼中被傳遞和使用。 Swift 中的閉包與 C 和 Objective-C 中的 blocks 以及其他一些編程語言中的 lambdas 比較相似。?
閉包的形式主要有三種:
? ? ? ? ? 1. 全局函數是一個有名字但不會捕獲任何值的閉包
? ? ? ? ? 2. 嵌套函數是一個有名字并可以捕獲其封閉函數域內值的閉包
? ? ? ? ? 3. 閉包表達式是一個利用輕量級語法所寫的可以捕獲其上下文中變量或常量值的沒有名字 的閉包?
? ? ? Swift 的閉包表達式擁有簡潔的風格,并鼓勵在常見場景中以實現語法優化,主要優化如下:
? ? ? ? ? * 利用上下文推斷參數和返回值類型
? ? ? ? ? * 單表達式(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]?
Trailing 閉包語法 (結尾閉包)
? ? 當一個閉包表達式作為最后一個參數傳遞給函數,我們可以使用結尾閉包來增強可讀性,上面的例子也可按照下面的寫法來寫:
比如數組的過濾可以簡便的這樣寫:
var nums = [1,9,2,8] var test = nums.filter { num -> Bool inreturn num%3 == 0//過濾掉不能被3整除的數 } println(test)//[9]?
var test = nums.filter {return $0%3 == 0//過濾掉不能被3整除的數 }?
?
?
轉載于:https://www.cnblogs.com/imhere/p/4255327.html
總結
以上是生活随笔為你收集整理的Swift学习笔记 闭包表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无线路由器网络测试软件,如何简单快速测试
- 下一篇: 什么是视频数据结构化?