国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Swift閉包表達式

2019-11-14 19:23:12
字體:
來源:轉載
供稿:網友

閉包是功能性自包含模塊,可以在代碼中被傳遞和使用。 Swift 中的閉包與 C 和 Objective-C 中的 blocks 以及其他一些編程語言中的 lambdas 比較相似。

閉包的形式主要有三種:

1. 全局函數是一個有名字但不會捕獲任何值的閉包

2. 嵌套函數是一個有名字并可以捕獲其封閉函數域內值的閉包

3. 閉包表達式是一個利用輕量級語法所寫的可以捕獲其上下文中變量或常量值的沒有名字 的閉包

Swift 的閉包表達式擁有簡潔的風格,并鼓勵在常見場景中以實現語法優化,主要優化如下:

* 利用上下文推斷參數和返回值類型

* 單表達式(single-exPRession)閉包可以省略 return 關鍵字

* 參數名稱簡寫

* Trailing 閉包語法 (結尾閉包)

嵌套函數:

1 var nums = [1,9,2,8]2 func testF(num1 : Int, num2 : Int) -> Bool{3     return num1 > num24 }5 sort(&nums, testF)6 println(nums)//[9, 8, 2, 1]

沒有優化的閉包表達式:

1 var nums = [1,9,2,8]2 sort(&nums,{(num1:Int,num2:Int) -> Bool in //in 參數以及返回值與閉包主體的分割線3 return num1 > num24 })5 println(nums)//[9, 8, 2, 1]

簡化閉包函數表達式:(語法優化)

5 var nums = [1,9,2,8]6 sort(&nums,{(num1,num2) in           //in 參數以及返回值與閉包主體的分割線7     return num1 > num28     })9 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) -> Boolprintln(nums)//[9, 8, 2, 1]

Trailing 閉包語法 (結尾閉包)

當一個閉包表達式作為最后一個參數傳遞給函數,我們可以使用結尾閉包來增強可讀性,上面的例子也可按照下面的寫法來寫:

var nums = [1,9,2,8]//這種寫法sort(&nums){ num1,num2 -> Bool in  //in 參數以及返回值與閉包主體的分割線    return num1 > num2}//這種寫法sort(&nums){    return $0 > $1}//但是如果使用的是已聲明的函數的話,只能這種sort(&nums,>)println(nums)//[9, 8, 2, 1]

比如數組的過濾可以簡便的這樣寫:

var nums = [1,9,2,8]var test = nums.filter { num -> Bool in    return num%3 == 0//過濾掉不能被3整除的數}println(test)//[9]var test = nums.filter {    return $0%3 == 0//過濾掉不能被3整除的數}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双桥区| 合阳县| 山西省| 客服| 田林县| 周至县| 临朐县| 诸城市| 雅安市| 高清| 金寨县| 新闻| 无锡市| 育儿| 垦利县| 鹤庆县| 五原县| 揭西县| 东丰县| 南雄市| 龙南县| 石屏县| 乳山市| 图木舒克市| 绥德县| 晴隆县| 桂阳县| 肥城市| 彝良县| 红桥区| 易门县| 安丘市| 乳源| 四川省| 太白县| 中江县| 张家港市| 兴海县| 大兴区| 灵台县| 宜良县|