RxSwift之环境的搭建配置与基础控件的使用
生活随笔
收集整理的這篇文章主要介紹了
RxSwift之环境的搭建配置与基础控件的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Rx 簡介
一、什么是 Rx?
- Rx 是 Reactive X 的縮寫,簡單來說就是基于異步 Event(事件)序列的響應(yīng)式編程。
- Rx 可以簡化異步編程方法,并提供更優(yōu)雅的數(shù)據(jù)綁定,讓我們可以時刻響應(yīng)新的數(shù)據(jù)同時順序地處理它們。
- ReactiveX(Reactive Extensions)是通過可觀察的流實現(xiàn)異步編程的一種API,它結(jié)合了觀察者模式、迭代器模式和函數(shù)式編程的精華。RxSwift 是 ReactiveX 編程思想的一種實現(xiàn),幾乎每一種語言都會有那么一個 Rx[xxxx] 框架,比如Rxswift,RxJava,RxJS 等。
二、Rx 庫
- Rx 本身可以說是一種跨平臺的標(biāo)準(zhǔn),它有自己的社區(qū)論壇,不管是 web 還是移動開發(fā),都能用 Rx 的思維和方法來完成你的工作。
- 作為一種跨平臺標(biāo)準(zhǔn),目前已經(jīng)有許多基于不同開發(fā)語言的 Rx 的庫。除了 RxSwift 之外,還有 RxJava,RxJS, RxKotlin, Rx.NET等庫。
- Rx 庫雖然用的語言不同,但它們之間其實都是相通的,都有相同的 API。所以說如果以后使用別的語言做其他的方面的開發(fā),同樣是可以使用相同的思維甚至相同的方法接口(除了語言不同)來編程。
- ReactiveX 不僅是一個編程接口,它是一種編程思想的突破,它影響了許多其它的程序庫和框架以及編程語言。它拓展了觀察者模式,能夠自由組合多個異步事件,而不需要去關(guān)心線程,同步,線程安全,并發(fā)數(shù)據(jù)以及I/O阻塞。
- RxSwift 是 Rx 為 Swift 語言開發(fā)的一門函數(shù)響應(yīng)式編程語言, 它可以代替iOS系統(tǒng)的 Target Action / 代理 / 閉包 / 通知 / KVO,同時還提供網(wǎng)絡(luò)、數(shù)據(jù)綁定、UI事件處理、UI的展示和更新、多線程等。
RxSwift 的安裝與配置
一、手動安裝
- 從 Github 上下載最新的代碼;
- 將下載下來的源碼包中 Rx.xcodeproj 拖拽至工程中;
- 工程 -> General -> Embedded Binaries 項,把 iOS 版的 RxSwift.framework、RxCocoa.framework 添加進(jìn)來。
二、CocoaPods 安裝
- 替換 YOUR_TARGET_NAME 然后在 Podfile 目錄下;
- 終端輸入
- 使用 RxSwift 的地方 import
- RxSwift:它只是基于 Swift 語言的 Rx 標(biāo)準(zhǔn)實現(xiàn)接口庫,所以 RxSwift 里不包含任何 Cocoa 或者 UI方面的類。
RxCocoa:是基于 RxSwift針對于 iOS開發(fā)的一個庫,它通過 Extension 的方法給原生的比如 UI 控件添加了 Rx 的特性,使得容易訂閱和響應(yīng)這些控件的事件。
使用示例
一、UITextField
- 監(jiān)聽單個 textField 內(nèi)容的變化(文本響應(yīng)):
- 效果展示
- 使用 change 事件效果一樣:
二、UIButton
- 實現(xiàn)UIButton點擊事件響應(yīng):
- 修改UIButton的Control.Events:
- 將UITextField的輸入內(nèi)容綁定到UIButton屬性:
- 效果展示
三、UIScrollView
self.scrollView.rx.contentOffset.subscribe(onNext: { (content) inself.view.backgroundColor = UIColor.init(red: content.y / 255.0 * 0.4, green: content.y / 255.0 * 0.6, blue: content.y / 255.0 * 0.8, alpha: 1)}).disposed(by: disposeBag)四、手勢
let gesture = UITapGestureRecognizer()self.label.isUserInteractionEnabled = trueself.label.addGestureRecognizer(gesture)gesture.rx.event.subscribe(onNext: { (tap) inprint(tap.view as Any)}).disposed(by: disposeBag)五、通知
NotificationCenter.default.rx.notification(UIResponder.keyboardDidShowNotification).subscribe(onNext: { (notification) inprint(notification)}).disposed(by: disposeBag)六、KVO
self.boy.rx.observeWeakly(String.self, "name").subscribe(onNext: { (value) inprint(value as Any)}).disposed(by: disposeBag)override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {self.boy.name = "girl"print(self.boy.name)}七、NSTimer
- 避免了實現(xiàn)定時器的runloop影響、銷毀問題、線程問題;
八、URLSession 網(wǎng)絡(luò)請求
URLSession.shared.rx.response(request: URLRequest.init(url: URL.init(string: "https://www.baidu.com")!)).subscribe(onNext: { (response, data) inprint(response)}).disposed(by: disposeBag)九、UITextView
UITextView有如下委托回調(diào)方法:
- didBeginEditing:開始編輯
- didEndEditing:結(jié)束編輯
- didChange:編輯內(nèi)容發(fā)生改變
- didChangeSelection:選中部分發(fā)生變化
完整示例
RxSwift基礎(chǔ)使用
總結(jié)
以上是生活随笔為你收集整理的RxSwift之环境的搭建配置与基础控件的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift之捕捉侧滑返回事件并跳转指定控
- 下一篇: iOS之深入解析Objective-C和