Swift 2.1 Closure(閉包)

# 閉包(closures)

-/*閉包(Closures

-? *閉包是自包含的功能代碼塊桩卵,可以在代碼中使用或者用來作為參數(shù)傳值。

-? *Swift中的閉包與COC中的blocks和其它編程語言(如Python)中的lambdas類似。

-? *閉包可以捕獲和存儲上下文中定義的的任何常量和變量的引用售担。這就是所謂的變量和變量的自封閉,

-? *因此命名為閉包“("Closures").Swift還會處理所有捕獲的引用的內(nèi)存管理署辉。

-? *

-? *全局函數(shù)和嵌套函數(shù)其實就是特殊的閉包族铆。

-? *閉包的形式有:

-? *1)全局函數(shù)都是閉包,有名字但不能捕獲任何值哭尝。

-? *2)嵌套函數(shù)都是閉包哥攘,且有名字,也能捕獲封閉函數(shù)內(nèi)的值材鹦。

-? *3)閉包表達式都是無名閉包逝淹,使用輕量級語法,可以根據(jù)上下文環(huán)境捕獲值桶唐。

-? *

-? * Swift中的閉包有很多優(yōu)化的地方:

-? * (1)根據(jù)上下文推斷參數(shù)和返回值類型

-? * (2)從單行表達式閉包中隱式返回(也就是閉包體只有一行代碼栅葡,可以省略return

-? * (3)可以使用簡化參數(shù)名,如$0, $1(0開始尤泽,表示第i個參數(shù)...)

-? * (4)提供了尾隨閉包語法(Trailing closure syntax)

-? */


// MARK: -

// MARK: 閉包

import UIKit

var arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({(a:Int,b:Int) -> Bool in

return a > b

})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({a,b in return a>b})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({a,b in a>b})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({$0 > $1})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace(>)

var 字母數(shù)組 = ["a","aaa","abc","b","a","ss","aass"]

字母數(shù)組.sortInPlace({ (s1 : String, s2 : String) -> Bool in

if (s1.characters.count != s2.characters.count) {

return s1.characters.count < s2.characters.count

} else {

return s1 < s2

}

})

字母數(shù)組

字母數(shù)組 = ["a","aaa","abc","b","a","ss","aass"]

字母數(shù)組.sortInPlace({

if ($0.characters.count != $1.characters.count) {

return $0.characters.count < $1.characters.count

} else {

return $0 < $1

}

})

//trailing closure

字母數(shù)組 = ["a","aaa","abc","b","a","ss","aass"]

字母數(shù)組.sortInPlace(){ (s1 : String, s2 : String) -> Bool in

if (s1.characters.count != s2.characters.count) {

return s1.characters.count < s2.characters.count

} else {

return s1 < s2

}

}

字母數(shù)組

//captures Values

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({fabs(Float($0 - 5)) > fabs(Float($1 - 5))})

let num = 5

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({fabs(Float($0 - num)) > fabs(Float($1 - num))})

func calcTotalMiles(todayMiles : Int) -> ()->Int {

var totalMiles = 0

return {totalMiles += todayMiles; return totalMiles;}

}

//twoMiles實際上是閉包欣簇,閉包是引用類型的规脸,所以totalMiles已經(jīng)被閉包所引用,它的值會一直保留在閉包里面而不會為0

let twoMiles = calcTotalMiles(2)

twoMiles()

twoMiles()

let myPlan = twoMiles

myPlan()

twoMiles()

//typealias定義一個閉包closure

//相當于typedef void (^GetNumBlcok)(int num);

typealias GetNumClosure = (num:Int) -> Void

var myClosure : GetNumClosure?

func getNum(closure : (num:Int) -> Void) {

myClosure = closure

}

getNum { (num) -> Void in

//輸出調(diào)用的值

num

}

myClosure!(num : 5)

myClosure!(num : 4)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊咽,一起剝皮案震驚了整個濱河市莫鸭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌横殴,老刑警劉巖黔龟,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滥玷,居然都是意外死亡,警方通過查閱死者的電腦和手機巍棱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門惑畴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人航徙,你說我怎么就攤上這事如贷。” “怎么了到踏?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵杠袱,是天一觀的道長。 經(jīng)常有香客問我窝稿,道長楣富,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任伴榔,我火速辦了婚禮纹蝴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踪少。我一直安慰自己塘安,他們只是感情好,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布援奢。 她就那樣靜靜地躺著兼犯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪集漾。 梳的紋絲不亂的頭發(fā)上切黔,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音具篇,去河邊找鬼绕娘。 笑死,一個胖子當著我的面吹牛栽连,可吹牛的內(nèi)容都是我干的险领。 我是一名探鬼主播侨舆,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绢陌!你這毒婦竟也來了挨下?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脐湾,失蹤者是張志新(化名)和其女友劉穎臭笆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秤掌,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡愁铺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闻鉴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茵乱。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孟岛,靈堂內(nèi)的尸體忽然破棺而出瓶竭,到底是詐尸還是另有隱情,我是刑警寧澤渠羞,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布斤贰,位于F島的核電站,受9級特大地震影響次询,放射性物質(zhì)發(fā)生泄漏荧恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一屯吊、第九天 我趴在偏房一處隱蔽的房頂上張望块饺。 院中可真熱鬧,春花似錦雌芽、人聲如沸授艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淮腾。三九已至,卻和暖如春屉佳,著一層夾襖步出監(jiān)牢的瞬間谷朝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工武花, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留圆凰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓体箕,卻偏偏與公主長得像专钉,于是被迫代替她去往敵國和親挑童。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容