認(rèn)識(shí)RxSwift
一句話:讓你在相同的時(shí)間用更少的代碼完成更多的功能归薛。
總結(jié):早點(diǎn)下班枪眉!
RxSwift 核心概念就是總共有兩個(gè):
1.一個(gè)觀察者( Observer )訂閱一個(gè)可觀察序列( Observable )。
2.觀察者對(duì) Observable 發(fā)射的數(shù)據(jù)或數(shù)據(jù)序列作出響應(yīng)访得。
簡(jiǎn)單的說明放一個(gè)官方的例子(所有的例子都是要么官方咸作,要么是項(xiàng)目中引用出來說明的,應(yīng)該都具有一定的代表性)
Observable.combineLatest(firstName.rx.text, lastName.rx.text) { "\($0!) \($1!)" }
.map { "Greetings, \($0)" }
.bind(to: greetingLabel.rx.text)
.disposed(by: rx.disposeBag)
這一段代碼中酣衷,具體完成了這些事情
1. 將 firstName 和 lastName 的 text 值用空格合并起來作為結(jié)果傳遞給下一步使用
2. 使用 map 的方法,將上一步得到值前面加上一個(gè) Greeting 次泽,并將該值傳遞給后面使用
3. bindTo 就是綁定穿仪,將上一步的值綁定到 greetingLabel 的 text
4. disposed最后做一次資源回收
不太理解也沒太大關(guān)系。畢竟我一開始也是懵逼的意荤。
簡(jiǎn)單來說啊片,在用rx進(jìn)行編寫的時(shí)候,要考慮到數(shù)據(jù)或者是操作的流向袭异。
比如通過判斷用戶輸入的手機(jī)號(hào)來對(duì)按鈕的enable事件進(jìn)行處理钠龙。
比如通過scrollview的contentoffset.x與screen_width的比值來控制pagecontrol的currentpage
或者說通過按鈕的點(diǎn)擊事件來進(jìn)行其他操作......
舉個(gè)栗子:
這個(gè)是一個(gè)比較典型的引導(dǎo)頁界面,storyboard上面創(chuàng)建一個(gè)ViewController御铃,放一個(gè)scrollview以及pagecontrol、button沈矿、三個(gè)imageView
如果我們要來實(shí)現(xiàn)功能將currentpage與contentoffset.x進(jìn)行綁定實(shí)現(xiàn)滑動(dòng)跳轉(zhuǎn)功能上真。正常的代碼YY一下就知道不算太多,但是還要寫delegate來判斷羹膳。所以采用rx來完成功能:
整體來說就是兩句Kァ!陵像!就珠,完成了同步跳轉(zhuǎn)以及按鈕點(diǎn)擊進(jìn)入APP功能。(這里沒有使用$0來表示醒颖,為了盡可能的表示清楚妻怎,后面會(huì)直接采用$0來表示)
代碼的意思很簡(jiǎn)單,創(chuàng)建一個(gè)scrollview的contentoffset觀察者泞歉,綁定給pagecontrol的currentpage逼侦。因?yàn)閏urrentpage接收Int值匿辩,所以要將offset與width進(jìn)行比值得到當(dāng)前所處的頁面位置。最后在回收處理榛丢。創(chuàng)建一個(gè)button的tap觀察者铲球,同時(shí)訂閱點(diǎn)擊button操作,當(dāng)前是點(diǎn)擊按鈕會(huì)打印出進(jìn)入APP晰赞。最后在回收處理稼病。
這個(gè)是比較簡(jiǎn)單的例子,如果還是覺得看著吃力的話掖鱼,建議先看看最初話中提供的資料溯饵。以及有非常詳細(xì)全面的講解了。
最后附上效果圖锨用。
如果有錯(cuò)誤的地方丰刊,請(qǐng)指正。覺得還行請(qǐng)支持一下吧增拥!