今天的博客算是比較基礎(chǔ)的元镀,還是那句話露泊,基礎(chǔ)這東西在什么時(shí)候都是最重要的。說到函數(shù)乖阵,只要是寫過程序就肯定知道函數(shù)是怎么回事宣赔,今天就來討論一下Swift中的函數(shù)的特性以及Swift中的閉包。今天的一些小實(shí)例中回類比一下Objective-C中的函數(shù)的寫法等等瞪浸。Swift中的函數(shù)還是有許多好用的特性的儒将,比如輸入?yún)?shù),使用元組返回多個(gè)值对蒲, 定義形參名钩蚊,設(shè)定默認(rèn)參數(shù)以及可變參數(shù)等等一些好用的特性贡翘。而在Swift中的閉包就是Objective-C中的Block, 除了語法不通外,兩者的用法是一樣的砰逻。廢話少說鸣驱,開始今天的主題,先搞一搞Swift中的函數(shù)蝠咆,然后在搞一搞Swift中的閉包踊东。
一.Swift中的函數(shù)
1. 函數(shù)的定義與使用
在介紹Swift中的函數(shù)之前,我想用Objective-C中的一個(gè)簡(jiǎn)單的加法函數(shù)來作為引子刚操,然后類比著實(shí)現(xiàn)一下Swift中相同功能的函數(shù)闸翅。關(guān)于函數(shù)定義就比較簡(jiǎn)單了,就是一些語法的東西菊霜,下面的代碼片段是Objc中求兩個(gè)整數(shù)之和的函數(shù)缎脾,并返回兩個(gè)數(shù)的和。
1
2
3-?(NSInteger)sumNumber1:(NSInteger)?number1
number2:(NSInteger)?number2?{returnnumber1?+?number2;
}
函數(shù)的功能比較簡(jiǎn)單了占卧,就是把兩個(gè)整數(shù)傳進(jìn)來遗菠,然后返回兩個(gè)整數(shù)的和。接下來將用Swift語言實(shí)現(xiàn)华蜒,也好通過這個(gè)實(shí)例來熟悉一下Swift語言中定義函數(shù)的語法辙纬。下方是Swift語言中求兩個(gè)整數(shù)之和的函數(shù)。語法比較簡(jiǎn)單了叭喜,在Swift中定義函數(shù)贺拣,我們會(huì)使用到關(guān)鍵字func來聲明函數(shù)。
1
2
3
4//函數(shù)定義
func?sum?(number1:Int,?number2:Int)?->?Int{
returnnumber1?+?number2;
}
用文字來描述Swift定義基本函數(shù)的語法就是:func函數(shù)名(形參列表) ->返回值類型{函數(shù)體}捂蕴,這樣你就可以定義一個(gè)函數(shù)了譬涡。當(dāng)然,函數(shù)定義時(shí)還有好多其他的用法啥辨,下面會(huì)詳細(xì)介紹涡匀。上面函數(shù)的調(diào)用方法如下:
1
let?sumTwoNubmer?=?sum(2,?number2:?3);
2. 函數(shù)中的形參列表
關(guān)于函數(shù)中的形參列表還是有必要提上一嘴的,因?yàn)樾螀⒘斜碜鳛楹瘮?shù)數(shù)據(jù)源之一溉知,所以把參數(shù)列表好好的搞一搞還是很有必要的陨瘩。參數(shù)列表也有很多好用的使用方式,接下來詳細(xì)的介紹一下函數(shù)的形參列表级乍。
(1) 默認(rèn)的形參是常量(let)
在函數(shù)的形參列表中舌劳,默認(rèn)的形參是常量捌议。也就是相當(dāng)于用let關(guān)鍵字對(duì)形參進(jìn)行修飾了柬焕。我們可以做個(gè)試驗(yàn)更啄,把上面加法函數(shù)做一個(gè)修改秘噪,在加法函數(shù)中對(duì)number1進(jìn)行加1操作健民,你會(huì)得到一個(gè)錯(cuò)誤蜡豹,這個(gè)錯(cuò)誤的大體意思就是“number1是不可被修改的捂齐,因?yàn)樗莑et類型的常量”汗捡。并且編譯器還給人出了Fix-it(修復(fù))的方案,就是在number1前面使用var關(guān)鍵字進(jìn)行修飾脸侥,使其成為變量建邓,這樣才可以修改其值。
上面說這么多睁枕,一句話:形參默認(rèn)是常量官边,如果你想讓其是變量,那么你可以使用var關(guān)鍵字進(jìn)行修飾外遇,這樣被關(guān)鍵字var修飾的變量在函數(shù)中就可以被修改注簿。下方就是報(bào)的這個(gè)錯(cuò)誤,和編譯器提供的解決方案跳仿。(在Objc中默認(rèn)可以在函數(shù)中改變形參的值)
(2)給形參命名
為了代碼的可讀性和可維護(hù)性诡渴,我們?cè)诙x函數(shù)時(shí),需要為每個(gè)參數(shù)名一個(gè)名字菲语,這樣調(diào)用者見名知意妄辩,很容易就知道這個(gè)參數(shù)代表什么意思了。接下來還是在上述加法函數(shù)中進(jìn)行修改山上,為每個(gè)參數(shù)名一個(gè)名字眼耀,并看一下調(diào)用方式。修改上面的函數(shù)佩憾,給第一個(gè)形參命名成numberOne, 第二個(gè)形參為numberTwo, 下方是修改后的函數(shù)哮伟。 緊接著sum()函數(shù)的調(diào)用方式也會(huì)有所改變,在調(diào)用函數(shù)時(shí)編譯器會(huì)給出參數(shù)的名稱妄帘,這樣調(diào)用者一目了然楞黄。
1
2
3
4
5
6//函數(shù)定義
func?sum?(numberOne?number1:Int,?numberTwo?number2:Int)?->?Int{
returnnumber1?+?number2;
}
let?sumTwoNubmer?=?sum(numberOne:?10,?numberTwo:?20);
調(diào)用上述函數(shù)時(shí),下方是編譯器給出的提示抡驼,一目了然呢鬼廓。
關(guān)于Swift中參數(shù)名的內(nèi)容,要說明的是在Swift1.0的時(shí)候婶恼,你可以在參數(shù)前面添加上#號(hào)桑阶,然后參數(shù)名就與變量(或者常量)的名字相同,而Swift2.0后這個(gè)東西去掉了勾邦,因?yàn)槟J(rèn)就相當(dāng)于Swift1.0中添加#號(hào)。
(3) 函數(shù)的傳參與傳引用
先暫且這么說著割择,在C語言的函數(shù)中可以給函數(shù)傳入?yún)?shù)眷篇,或者傳入實(shí)參的內(nèi)存地址就是所謂的傳引用。如果傳入的是引用的話荔泳,在函數(shù)中對(duì)值進(jìn)行修改的話蕉饼,那么出了函數(shù)虐杯,這個(gè)被修改的值是可以被保留的。在Swift中也是可以的昧港,不過你需要使用inout關(guān)鍵字修飾形參擎椰,并且在使用該函數(shù)時(shí),用&來修飾创肥。這一點(diǎn)和C語言中類似达舒,&就是取地址符。下方是inout使用的一個(gè)小實(shí)例叹侄。
1
2
3
4
5func?incrementStepTwo?(inout?myNumber:Int)?{
myNumber?+=?2
}
varmyTestNumber?=?6
incrementStepTow(&myTestNumber)//myTestNumber?=?8
myTestNumber變量經(jīng)過incrementStepTwo()函數(shù)后巩搏,其值就會(huì)增加2。當(dāng)然前提是myTestNumber是變量趾代,如果myTestNumber是常量的話贯底,那么對(duì)不起,調(diào)用該函數(shù)就會(huì)報(bào)錯(cuò)撒强,下面是把var改成let后IDE給的錯(cuò)誤提示禽捆。錯(cuò)誤原因很顯然是你動(dòng)了一個(gè)不該動(dòng)的值,也就是常量不可再次被修改的飘哨。
(4) 不定參數(shù)函數(shù)
不定參數(shù)函數(shù)也就是形參的個(gè)數(shù)是不定的睦擂,但是形參的類型必須是相同的。不定形參在使用時(shí)怎么取呢杖玲?不定個(gè)數(shù)的形參實(shí)際上是一個(gè)數(shù)組顿仇,我們可以通過for循環(huán)的形式來遍歷出每個(gè)形參的值,然后使用就可以了摆马。下方incrementMultableAdd()函數(shù)的形參的個(gè)數(shù)是不定的臼闻,其功能是求多個(gè)整數(shù)的和。在函數(shù)中我們只需遍歷每個(gè)參數(shù)囤采,然后把每個(gè)參數(shù)進(jìn)行相加述呐,最后返回所求的和即可。函數(shù)比較簡(jiǎn)單蕉毯,再此就不在啰嗦了乓搬。
(5) 默認(rèn)形參值
在Swift語言中是支持給形參賦初始值的,這一點(diǎn)在其他一些編程語言中也是支持的代虾。但是Objective-C這么看似古老的語言中就不支持給形參指定初始值进肯,在Swift這門現(xiàn)代編程語言中是支持這一特性的。默認(rèn)參數(shù)要從參數(shù)列表后開始為參數(shù)指定默認(rèn)值棉磨,不然就會(huì)報(bào)錯(cuò)江掩。下方就是為函數(shù)的形參指定默認(rèn)參數(shù)的示例。一個(gè)表白的方法sayLove(), 形參youName默認(rèn)是“山伯”, 形參loverName默認(rèn)是“英臺(tái)”环形。 緊接著是sayLove函數(shù)的三種不同的調(diào)用方式策泣,在調(diào)用函數(shù)時(shí)你可以不傳參數(shù),可以傳一個(gè)參數(shù)抬吟,當(dāng)然傳兩個(gè)也是沒問題的萨咕。
因?yàn)楹瘮?shù)的每個(gè)參數(shù)都是有名字的,在含有默認(rèn)參數(shù)的函數(shù)調(diào)用時(shí)火本,可以給任意一個(gè)參數(shù)進(jìn)行傳值危队,其他參數(shù)取默認(rèn)值,這也是Swift的一大特色之一发侵,具體請(qǐng)看如下簡(jiǎn)單的代碼示例:
3.函數(shù)類型
每個(gè)函數(shù)都有自己的所屬類型交掏,函數(shù)類型說白了就是如果兩個(gè)函數(shù)參數(shù)列表相同以及返回值類型相同,那么這兩個(gè)函數(shù)就有著相同的函數(shù)類型刃鳄。在Swift中可以定義一個(gè)變量或者常量來存儲(chǔ)一個(gè)函數(shù)的類型盅弛。接下來將用過一個(gè)實(shí)例還介紹一下函數(shù)類型是個(gè)什么東西。
(1) 首先創(chuàng)建兩個(gè)函數(shù)類型相同的函數(shù)叔锐,一個(gè)函數(shù)返回兩個(gè)整數(shù)的差值挪鹏,另一個(gè)函數(shù)返回兩個(gè)整數(shù)的乘積。當(dāng)然這兩個(gè)函數(shù)比較簡(jiǎn)單愉烙,直接上代碼:
1
2
3
4
5
6
7
8//現(xiàn)定義兩個(gè)函數(shù)類型相同的函數(shù)
func?diff?(number1:Int,?number2:Int)?->?Int?{
returnnumber1?-?number2;
}
func?mul?(number1:Int,?number2:Int)?->?Int?{
returnnumber1?*?number2;
}
(2) 函數(shù)定義好后讨盒,接著要定義個(gè)一個(gè)枚舉來枚舉每種函數(shù)的類型,下面定義這個(gè)枚舉在選擇函數(shù)時(shí)會(huì)用到步责,枚舉定義如下:
1
2
3
4
5//定義兩種計(jì)算的枚舉類型
enum?CountType:Int?{
caseDiffCount?=?0
caseMulCount
}
(3) 接下來就是把(1)和(2)中定義的東西通過一個(gè)函數(shù)來組合起來返顺。說白了,就是定義個(gè)函數(shù)來通過枚舉值返回這個(gè)枚舉值所對(duì)應(yīng)的函數(shù)類型蔓肯。有時(shí)候說多了容易犯迷糊遂鹊,就直接上代碼得了。下方函數(shù)的功能就是根據(jù)傳進(jìn)來的枚舉值來返回相應(yīng)的函數(shù)類型蔗包。
1
2
3
4
5
6
7
8
9
10
11
12
13//選擇類型的函數(shù)秉扑,并返回相應(yīng)的函數(shù)類型
func?choiseCountType(countType:CountType)?->?((Int,?Int)?->?Int)?{
//函數(shù)類型變量
varmyFuncType:(Int,?Int)?->?Int
switchcountType?{
case.DiffCount:
myFuncType?=?diff
case.MulCount:
myFuncType?=?mul
}
returnmyFuncType;
}
(4) 接下來就是使用(3)中定義的函數(shù)了,首先我們需要定義一個(gè)相應(yīng)函數(shù)類型((Int,Int) ->Int)的變量來接收choiseCountType()函數(shù)中返回的函數(shù)類型调限,然后調(diào)用該函數(shù)類型變量舟陆,在Playground中執(zhí)行的結(jié)果如下:
4.函數(shù)嵌套
我們可以把 3 中的代碼使用函數(shù)嵌套進(jìn)行重寫,在Swift中是支持函數(shù)嵌套的耻矮。 所以可以吧3.1和3.2中的函數(shù)放到3.3函數(shù)中的秦躯,所以我們可以對(duì)上述代碼使用函數(shù)嵌套進(jìn)行重寫。使用函數(shù)嵌套重寫后的代碼如下所示淘钟,當(dāng)然宦赠,choiseCountType()函數(shù)的調(diào)用方式?jīng)]用發(fā)生改變陪毡,重寫后的調(diào)用方式和3.4中的調(diào)用方式是一樣一樣的米母。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24//選擇類型的函數(shù)勾扭,并返回相應(yīng)的函數(shù)類型
func?choiseCountType(countType:CountType)?->?((Int,?Int)?->?Int)?{
//現(xiàn)定義兩個(gè)函數(shù)類型相同的函數(shù)
func?diff?(number1:Int,?number2:Int)?->?Int?{
returnnumber1?-?number2;
}
func?mul?(number1:Int,?number2:Int)?->?Int?{
returnnumber1?*?number2;
}
//函數(shù)類型變量
varmyFuncType:(Int,?Int)?->?Int
switchcountType?{
case.DiffCount:
myFuncType?=?diff
case.MulCount:
myFuncType?=?mul
}
returnmyFuncType;
}
二. 閉包
說道Swift中的閉包呢,不得不提的就是Objective-C中的Block, 其實(shí)兩者是一個(gè)東西铁瞒,使用方式以及使用場(chǎng)景都是相同的妙色。我們完全可以類比著Objective-C中的Block來介紹一下Swift中的Closure(閉包)。其實(shí)就是匿名函數(shù)慧耍。接下來的這段內(nèi)容身辨,先介紹一下Swift中Closure的基本語法,然后在類比著ObjC中的Block窺探一下Closure的使用場(chǎng)景芍碧。
1.Closure變量的聲明
Closure就是匿名函數(shù)煌珊,我們可以定義一個(gè)閉包變量,而這個(gè)閉包變量的類型就是我們上面介紹的“函數(shù)類型”泌豆。定義一個(gè)閉包變量其實(shí)就是定義一個(gè)特定函數(shù)類型的變量定庵,方式如下。因?yàn)镃losure變量沒有賦初始值踪危,所以我們把其聲明為可選類型的變量蔬浙。在使用時(shí),用!強(qiáng)制打開即可贞远。
1
varmyCloure0:((Int,?Int)?->?Int)?
除了上面的方式外畴博,我們還用另一種常用的聲明閉包變量的方式。那就是使用關(guān)鍵字typealias定義一個(gè)特定函數(shù)類型蓝仲,我們就可以拿著這個(gè)類型去聲明一個(gè)Closure變量了俱病,如下所示
1
2
3//定義閉包類型?(就是一個(gè)函數(shù)類型)
typealias?MyClosureType?=?(Int,?Int)?->?Int
varmyCloure:MyClosureType?
2. 給Closure變量賦值
給Closure變量賦值,其實(shí)就是把一個(gè)函數(shù)體賦值給一個(gè)函數(shù)類型的變量袱结,和函數(shù)的定義區(qū)別不大亮隙。但是給閉包變量賦值的函數(shù)體中含有參數(shù)列表,并且參數(shù)列表和真正的函數(shù)體之間使用關(guān)鍵字in來分割擎勘。 閉包可選變量的調(diào)用方式與普通函數(shù)沒什么兩樣咱揍,唯一不同的是這個(gè)函數(shù)需要用!來強(qiáng)制打開才可以使用。賦值和調(diào)用方式如下棚饵。
3. 閉包回調(diào)的應(yīng)用實(shí)例
暫且先稱作閉包回調(diào)吧煤裙,其實(shí)就是Objc中的Block回調(diào)。在Swift中的閉包回調(diào)和Objc中的Block回調(diào)用法一致噪漾,下方將會(huì)通過一個(gè)實(shí)例來介紹一下閉包的應(yīng)用之一硼砰。下方會(huì)創(chuàng)建兩個(gè)視圖控制器,我們暫且稱為FirstViewController和SecondViewController欣硼。在FirstViewController上有一個(gè)Label和一個(gè)Button, 這個(gè)Button用來跳轉(zhuǎn)到SecondViewController, 而這個(gè)Label用來顯示從SecondViewController中回調(diào)過來的值题翰。 而SecondViewController也有一個(gè)TextField和一個(gè)Button, 點(diǎn)擊Button就會(huì)把輸入框中的值通過閉包回調(diào)回傳到FirstViewController然后在FirstViewController上的Label顯示。
(1) 構(gòu)建這個(gè)實(shí)例的第一步要做的就是使用Stroyboard把我們所需的控件布局好,并且管理相應(yīng)的類豹障。當(dāng)然我們這個(gè)Demo的重點(diǎn)不在于如何去布局控件冯事,如何去關(guān)聯(lián)控件,以及如何去使用控件血公,所以上述的這些就不做贅述了昵仅。這個(gè)實(shí)例的重點(diǎn)在于如何使用Closure實(shí)現(xiàn)值的回調(diào)。下方是我們的控件布局和目錄結(jié)構(gòu)的截圖累魔,從Storyboard上的控件來看摔笤,功能也就一目了然了。點(diǎn)擊“FirstViewController” 上的“Go SecondViewController”按鈕垦写,就會(huì)跳轉(zhuǎn)到 “SecondViewController” 吕世。 在SecondViewController視圖上的輸入框輸入數(shù)值,點(diǎn)擊Back按鈕返回到FirstViewController, 同時(shí)把輸入框中的文本通過閉包回調(diào)的形式回傳過來在FristViewController的label上顯示梯投。大致就這個(gè)簡(jiǎn)單的功能命辖。
(2)FirstViewController.swift中的內(nèi)容
FirstViewController.swift中的內(nèi)容比較簡(jiǎn)單,就關(guān)聯(lián)一個(gè)Label控件和一個(gè)按鈕點(diǎn)擊的事件晚伙,點(diǎn)擊按鈕就會(huì)跳轉(zhuǎn)到SecondViewController吮龄,具體代碼如下,在此就不啰嗦了咆疗,請(qǐng)看代碼中的注釋漓帚。下方代碼重要的一點(diǎn)是在跳轉(zhuǎn)到SecondViewController時(shí)要實(shí)現(xiàn)其提供的閉包回調(diào),以便接受回傳過來的值午磁。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36//
//??FirstViewController.swift
//??SwiftDemo
//
//??Created?by?Mr.LuDashi?on?15/11/18.
//??Copyright???2015年?ZeluLi.?All?rights?reserved.
//
import?UIKit
class?FirstViewController:?UIViewController?{
@IBOutletvarshowTextLabel:?UILabel!//展示回調(diào)過來的文字信息
override?func?viewDidLoad()?{
super.viewDidLoad()
}
override?func?didReceiveMemoryWarning()?{
super.didReceiveMemoryWarning()
}
//點(diǎn)擊按鈕跳轉(zhuǎn)到SecondViewController
@IBAction?func?tapGoSecondViewControllerButton(sender:?UIButton)?{
//從Storyboard上加載SecondViewController
let?secondVC?=?UIStoryboard(name:"Main",?bundle:?NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("SecondViewController")as!?SecondViewController
//實(shí)現(xiàn)回調(diào)尝抖,接收回調(diào)過來的值
secondVC.setBackMyClosure?{?(inputText:String)?->?Voidin
self.showTextLabel.text?=?inputText
}
//push到SecondViewController
self.navigationController?.pushViewController(secondVC,?animated:true)
}
}
(3) SecondViewController.swift中的內(nèi)容
SecondViewController.swift中的內(nèi)容也不麻煩,就是除了關(guān)聯(lián)控件和事件外迅皇,還定義了一個(gè)閉包類型(函數(shù)類型)昧辽,然后使用這個(gè)特定的函數(shù)類型聲明了一個(gè)此函數(shù)類型對(duì)應(yīng)的變量。我們可以通過這個(gè)變量來接受上個(gè)頁面?zhèn)鬟^來的閉包體登颓,從而把用戶輸入的值搅荞,通過這個(gè)閉包體回傳到上個(gè)頁面。具體代碼實(shí)現(xiàn)如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41//
//??SecondViewController.swift
//??SwiftDemo
//
//??Created?by?Mr.LuDashi?on?15/11/18.
//??Copyright???2015年?ZeluLi.?All?rights?reserved.
//
import?UIKit
typealias?InputClosureType?=?(String)?->?Void//定義閉包類型(特定的函數(shù)類型函數(shù)類型)
class?SecondViewController:?UIViewController?{
@IBOutletvarinputTextField:?UITextField!//輸入框框咙,讓用戶輸入值咕痛,然后通過閉包回調(diào)到上一個(gè)頁面
varbackClosure:InputClosureType?//接收上個(gè)頁面穿過來的閉包塊
override?func?viewDidLoad()?{
super.viewDidLoad()
}
override?func?didReceiveMemoryWarning()?{
super.didReceiveMemoryWarning()
}
//閉包變量的Seter方法
func?setBackMyClosure(tempClosure:InputClosureType)?{
self.backClosure?=?tempClosure
}
@IBAction?func?tapBackButton(sender:?UIButton)?{
ifself.backClosure?!=?nil?{
let?tempString:String??=?self.inputTextField.text
iftempString?!=?nil?{
self.backClosure!(tempString!)
}
}
self.navigationController!.popViewControllerAnimated(true)
}
}
(4) 經(jīng)過上面的步驟這個(gè)實(shí)例已經(jīng)完成,接下來就是看一下運(yùn)行效果的時(shí)間了喇嘱。本來想做成Git動(dòng)態(tài)圖的茉贡,感覺實(shí)例功能簡(jiǎn)單,而且UI上也比較簡(jiǎn)單者铜,就沒做腔丧,還是看截圖吧放椰。運(yùn)行效果的截圖如下:
4.數(shù)組中常用的閉包函數(shù)
在Swift的數(shù)組中自帶了一些比較好用的閉包函數(shù),例如Map, Filter, Reduce愉粤。接下來就好好的看一下這些閉包砾医,用起來還是比較爽的。
(1) Map(映射)
說到Map的用法和功能科汗,不能不說的是如果你使用過ReactiveCocoa框架藻烤,那么對(duì)里邊的Sequence中的Map的使用方式并不陌生绷雏。其實(shí)兩者的使用方法和功能是極為相似的头滔。如果你沒使用過RAC中的Map,那也無關(guān)緊要涎显,接下來我們先上段代碼開看一下數(shù)組中的Map閉包函數(shù)坤检。
通過上面的代碼段以及運(yùn)行結(jié)果,我們不難看出期吓,map閉包函數(shù)的功能就是對(duì)數(shù)組中的每一項(xiàng)進(jìn)行遍歷早歇,然后通過映射規(guī)則對(duì)數(shù)組中的每一項(xiàng)進(jìn)行處理,最終的返回結(jié)果是處理后的數(shù)組(以一個(gè)新的數(shù)組形式出現(xiàn))讨勤。當(dāng)然箭跳,原來數(shù)組中的元素值是保持不變的,這就是map閉包函數(shù)的用法與功能潭千。
(2) Filter (過濾器)
Filter的用法還是比較好理解的谱姓,F(xiàn)ilter就是一個(gè)漏勺,就是用來過濾符合條件的數(shù)據(jù)的刨晴。在ReactiveCocoa中的Sequence也是有Filter的屉来,用法還是來過濾Sequence中的數(shù)據(jù)的。而在數(shù)組中的Filter用來過濾數(shù)組中的數(shù)據(jù)狈癞,并且返回新的數(shù)組茄靠,新的數(shù)組中存放的就是符合條件的數(shù)據(jù)。Filter的用法如下實(shí)例蝶桶,下方的實(shí)例就是一個(gè)身高的過濾慨绳,過濾掉身高小于173的人,返回大于等于173的身高數(shù)據(jù)真竖。
(3)Reduce
在ReactiveCocoa中也是有Reduce這個(gè)概念的脐雪,ReactiveCocoa中使用Reduce來合并消減信號(hào)量。在swift的數(shù)組中使用Reduce閉包函數(shù)來合并items, 并且合并后的Value疼邀。下方的實(shí)例是一個(gè)Salary的數(shù)組喂江,其中存放的是每個(gè)月的薪水。我們要使用Reduce閉包函數(shù)來計(jì)算總的薪水旁振。下方是DEMO的截圖: