RxSwift 介绍与简单使用

本文介绍了RxSwift,一种用于响应式编程的库,简化了异步事件处理和数据绑定。内容包括RxSwift基本概念,RxCocoa对于UI交互的支持,以及如何使用RxSwift处理按钮点击、事件绑定、代理实现、闭包回调、通知、任务依赖管理和并行任务。同时,文章还探讨了DisposeBag在资源管理中的作用和函数式编程的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 Rx 介绍

1、什么是Rx

Rx 是 ReactiveX 的缩写,简单来说就是基于异步 Event 序列的响应式编程。Rx 可以简化异步编程方法,并提供更优雅的数据绑定,让我们可以时刻响应新的数据的同时,顺序地处理他们。

2、RxSwift

在编程过程中,我们经常需要去检测某些值的变化(如:textfield 输入变化),然后进行相应的处理。RxSwift 的出现,让程序里的时间传递响应方法做到了统一,将之前常用的事件传递方法(ru delegate、notification、target-action等),全部替换成 Rx 的“信号链”方式。

在 MVVM 的开发模式下,可以通过 RxSwift 获得更加方便的数据绑定方法,让 MVVM 更加灵活轻便。

3、RxCocoa

RxCocoa 是 RxSwift 的一部分,主要是 UI 相关的 Rx 封装。RxCocoa 实现了很多组件的绑定,协助开发者把值和控件进行绑定,避免代码中产生大量的通知、代理、数据修改等代码。也可以监听 delegate,无需把控件创建和 delegate 处理分开。

二、Rx 常见用法

1、给 button 添加点击事件(RxCocoa)

在之前,当我们需要给button添加一个点击事件的时候,得这么干:

button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)

@objc func buttonClicked() {
  ...
}

在使用 RxCocoa 之后,只需这样写:

button.rx.tap
  .subscribe { _ in // 订阅点击事件信号
    print("clicked button")
  }
  .disposed(by: disposeBag) // 
  
// RxSwift tap 源码
extension Reactive where Base: UIButton {
    
  /// Reactive wrapper for `TouchUpInside` control event.
  public var tap: ControlEvent<Void> {
    return controlEvent(.touchUpInside)
  }
}

2、事件 + bind + combine

  • share(replay: 1):共享同一个源,不单独创建新的源,以减少不必要的开支;
  • orEmpty:将可选值的 nil  转化为空字符串输出,以减少可选类型隐式解包;
  • bind:用来将一个信号发送者和一个信号监听者绑定在一起,即有信号发送,监听者自动收到通知;
  • combine:信号融合
func rxCombine() {
  let accountValid = accountTextField.rx.text.orEmpty
    .map {
    $0.count >= 5
  }.share(replay: 1)
  // 用 accountValid 来控制用户名提示语是否隐藏以及密码输入框是否可用。shareReplay 就是让他们共享这一个源,而不是为他们单独创建新的源。这样可以减少不必要的开支。
    
  let passwordValid = passwordTextField.rx.text.orEmpty.map {
    $0.count >= 5
  }.share(replay: 1)
    
  let everythingValid = Observable.combineLatest(accountValid, passwordValid) {
    $0 && $1
  }.share(replay: 1)
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值