Swift 閉包運算式,swift閉包運算式

來源:互聯網
上載者:User

Swift 閉包運算式,swift閉包運算式

閉包是功能性自包含模組,可以在代碼中被傳遞和使用。 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整除的數}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.