Swift學習之每日一tip (3)閉包

來源:互聯網
上載者:User

標籤:swift   每日一貼   xcode6-3   新版本   閉包   

閉包介紹
最近在學習swift的過程中,發現很多人都對於swift的閉包有很深的疑惑,今天就以我個人學習swift 1.2版本下的一些經驗進行一些分享,如有錯漏,望大家指出。ps.《關於Swift學習之每日一tip》我這段時間會持續更新,而其中關於swift的內容都是在今年(2014)春節之後,蘋果推出Xcode6.3測試版的之後推出的swift 1.2的文法,關於1.2與1.1的文法,我會在明天的內容中進行一下介紹。
通用閉包

首先,給大家寫一段常見的閉包代碼

demo{ (name) -> () in    println("\(name): 完成了嗎?")}

上面這個閉包實際上是閉包的一個回調,下面寫出準備好的閉包的內容

func demo(finished:(name: String)->()) {    println("小明正在玩命工作中... ")    // 執行閉包,完成耗時操作後,做回調    let t = "大 BOSS"    finished(name: t)}

執行結果:

小明正在玩命工作中... 大 BOSS: 完成了嗎?

以上就是一個最常用的閉包,在這裡,閉包實際上與Objective-c中的Block定義非常相似,都是先定義出後面準備好的閉包的內容,然後再在我們需要的地方進行閉包的調用,即可。
大家理解了閉包的原理之後,我們再來分析這段閉包代碼。

// 閉包的格式    /**    { (參數) -> (傳回值) in          代碼實現    }    */

大家在初學閉包的時候,可以比照著這個格式來看閉包的調用,因為一般在調用的時候,閉包會更加的直觀。

  • 在上面這段代碼中,在回調時,我們列印了一句話,傳入了一個閉包內部定義好的名字。
  • 而在閉包的準備內容中,我們可以看到,在這裡,實際上可以看做是C++或者其他進階語言中的函數,而我們的閉包實際上是一個參數。
  • 在這個函數內部,我們在需要的地方,進行閉包的調用。
  • 然後,我們再在其他需要執行這個函數的地方進行回調代碼,傳入我們在回調時想要得到的效果。
  • 整個過程實際上就是代理設計模式的設計思路,這在蘋果的ios開發中,非常常見,具體可以參照Objective-c中的代理和Block

不知道通過上面的這些內容,大家對於閉包有沒有一個初步的認識?

下面介紹一下閉包的一種常見簡化寫法:

尾隨閉包

實際上,第一次看到尾隨閉包的時候,我並沒有意識到這是一個閉包,因為他太簡單了,簡單到什麼程度?

demo2 {    println("over"        }

對,你沒看錯,就是這樣。這就是一個尾隨閉包的調用。
實際上,他的完整版應該是這樣的:

demo2 { () -> () in      println("over")}

看到這裡,相信聰明的同學已經猜出來了,這個尾隨閉包顧名思義,如果閉包是最後一個參數,可以進行簡化,當這個閉包裡連參數都沒有的話,我們就可以像上面那樣寫出如此簡單的閉包調用。
在這裡我們定義一下這個閉包:

func demo2(completion:()->()) {    // 執行耗時操作    println("耗時操作")    // 回調    completion()}

這個閉包就是符合我上面所說的閉包是最後一個參數,同時閉包裡連參數都沒有。
當然尾隨閉包只需要閉包是最後一個參數的情況下就可以進行簡寫,這裡就不寫了,因為本人並不推薦那樣的寫法,可讀性太差了!!

最後,我再簡單說一下閉包的傳回值:

閉包的傳回值

廢話不多說,上代碼:

// 閉包的傳回值    demo3 { () -> Int in        return 10    }

在這裡,大家似乎應該都發現了,我在寫代碼的時候都喜歡先寫調用,再寫閉包的內容,這裡當然是為了大家方便理解,拋開文法的束縛,不喜勿噴喲~^_^。
下面是閉包的定義:

func demo3(rowCount:()->Int) {    // 通過閉包的傳回值,獲得資料資訊    let count = rowCount()    println("行數 \(count)")    // ...}

這麼簡單的過程,相信小夥伴們應該都不需要我再多廢話了吧,今天就到這裡,明天再見。

Swift學習之每日一tip (3)閉包

相關文章

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.