日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RxSwift之环境的搭建配置与基础控件的使用

發(fā)布時間:2024/5/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 目錄下;
use_frameworks!target 'RxSwift基本使用' do# Comment the next line if you don't want to use dynamic frameworks# Pods for RxSwift基本使用pod 'RxSwift', '~> 5'pod 'RxCocoa', '~> 5'target 'RxSwift基本使用Tests' doinherit! :search_paths# Pods for testingpod 'RxBlocking', '~> 5'pod 'RxTest', '~> 5'endtarget 'RxSwift基本使用UITests' do# Pods for testingendend
  • 終端輸入
$ pod install
  • 使用 RxSwift 的地方 import
import RxSwiftimport RxCocoa
  • 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)):
self.textField.rx.text.orEmpty.subscribe(onNext: { (text) inif text.count > 0 {print(text)}}).disposed(by: disposeBag)
  • 效果展示
112123123412345123456123456712345678123456789
  • 使用 change 事件效果一樣:
self.textField.rx.text.orEmpty.changed.subscribe(onNext: {if text.count > 0 {print(text)}}).disposed(by: disposeBag)
二、UIButton
  • 實現(xiàn)UIButton點擊事件響應(yīng):
self.button.rx.tap.subscribe(onNext: { [weak self] inprint(self?.button.titleLabel?.text as Any)}).disposed(by: disposeBag)
  • 修改UIButton的Control.Events:
self.button.rx.controlEvent(.touchUpOutside)
  • 將UITextField的輸入內(nèi)容綁定到UIButton屬性:
self.textField.rx.text.bind(to: self.button.rx.title()).disposed(by: disposeBag)
  • 效果展示
三、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影響、銷毀問題、線程問題;
// 方法一:timer定時器/// 創(chuàng)建重復(fù)多次執(zhí)行序列/// 參數(shù)1: 幾秒后開始第一次執(zhí)行/// 參數(shù)2: 重復(fù)執(zhí)行間隔/// 參數(shù)3: 調(diào)度者let timer = Observable<Int>.timer(1, period: 2, scheduler: MainScheduler.instance)/// 添加訂閱timer.subscribe { (event) inprint(event)}.disposed(by: disposeBag)// 方法二:timer定時器 func setupTimer() {timer = Observable<Int>.interval(1, scheduler: MainScheduler.instance)timer.subscribe(onNext: { (num) inprint("\(num)")}).disposed(by: disposeBag) }
八、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ā)生變化
// 編輯響應(yīng)textView.rx.didBeginEditing.subscribe(onNext: {print("開始編輯")}).disposed(by: disposeBag)// 結(jié)束編輯響應(yīng)textView.rx.didEndEditing.subscribe(onNext: {print("結(jié)束編輯")}).disposed(by: disposeBag)// 內(nèi)容發(fā)生變化響應(yīng)textView.rx.didChange.subscribe(onNext: {print("內(nèi)容發(fā)生改變")}).disposed(by: disposeBag)// 選中部分變化響應(yīng)textView.rx.didChangeSelection.subscribe(onNext: {print("選中部分發(fā)生變化")}).disposed(by: disposeBag)

完整示例

RxSwift基礎(chǔ)使用

總結(jié)

以上是生活随笔為你收集整理的RxSwift之环境的搭建配置与基础控件的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。