RxOperators 2.11.0

RxOperators 2.11.0

dankinsoid 维护。



 
依赖
RxSwift~> 6.0
RxCocoa~> 6.0
 

  • 作者:
  • Voidilov

RxOperators

CI Status Version License Platform

描述

此仓库包含用于 RxSwift 的操作符和一些附加功能。

示例

import UIKit
import RxSwift
import RxCocoa
import RxOperators

final class SomeViewModel {
  let title = ValueSubject("Title")
  let icon = ValueSubject<UIImage?>(nil)
  let color = ValueSubject(UIColor.white)
  let bool = ValueSubject(false)
  ...
} 

class ViewController: UIViewController {

  @IBOutlet private weak var titleLabel: UILabel!
  @IBOutlet private weak var iconView: UIImageView!
  @IBOutlet private weak var switchView: UISwitch!

  let viewModel = SomeViewModel()
  ...
  private func configureSubscriptions() {
    viewModel.title ==> titleLabel.rx.text
    viewModel.iconView ==> iconView.rx.image
    viewModel.bool <==> switchView.rx.isOn
    viewModel.color ==> (self, ViewController.setTint)
    //or viewModel.color ==> rx.weak(method: ViewController.setTint)
    //or viewModel.color ==> {[weak self] in self?.setTint(color: $0) }
  }

  private func setTint(color: UIColor) {
  ...
  } 
  ...
}

用法

  1. 操作符 =>
  • ObservableTypeObserverType,创建订阅并返回 Disposable
let disposable = intObservable => intObserver
  • DisposableDisposeBag
someDisposable => disposeBag
someObservable => someObserver => disposeBag
  • ObservableTypeSchedulerType,返回 Observable<E>
let scheduler = SerialDispatchQueueScheduler(internalSerialQueueName: "Scheduler")
someObservable => scheduler => someObserver => disposeBag
  1. 操作符 ==>

在主队列上驱动 ObservableTypeObserverType 并返回 Disposable

intObservable ==> intObserver => disposeBag
  1. 操作符 <=><==>Equatable 序列创建双向订阅

  2. 操作符 =>> 替代 .distinctUntilChanged()

  3. DisposableObserverTypeDisposableObservableType - 协议用于观察者和可观察对象,在解构时对所有订阅进行销毁,因此无需为每个订阅控制销毁。

  4. ValueSubject<Element> - 包含 DisposeBagVariable<Element> 的类似物。

  5. 一些功能

  • skipNil() 操作符
  • 布尔序列的 or(Bool), .toggle(), ! 操作符
  • 使用 ++= 操作符合并可观察对象,创建处置对象等
  • interval(...)
  • withLast() -> Observable<(previous: Element?, current: Element)>
  • rx.asDisposeBag
  • .mp - @dynamicMemberLookup 映射器
  • asResult() -> Observable<Result<Element, Error>>
  • nilIfEmpty
  • isEmpty
  • isNil
  • isNilOrEmpty
  • wrap(...), guarantee(...) 单独方法,用于从带有完成的函数创建 Single
  • append(...)
  • smooth(...) 方法,用于平滑变化,例如:序列[0, 1] 转换为 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
  • onNext, afterNext, onError, afterError, onCompleted, afterCompleted, onSubscribe, onSubscribed, onDispose 包装 do(...) 操作符
  • guard()
  • rx.isFirstResponder
  • UIStackView().rx.update(...)
  • UIView().rx.transform.scale(), .rotation(), .translation()

安装

  1. CocoaPods

RxOperators 通过 CocoaPods 提供。要安装,请将以下行添加到您的 Podfile 中

pod 'RxOperators'

并在 podfile 目录中首先运行pod update

  1. Swift 包管理器

创建一个 Package.swift 文件。

// swift-tools-version:5.0
import PackageDescription

let package = Package(
  name: "SomeProject",
  dependencies: [
    .package(url: "https://github.com/dankinsoid/RxOperators.git", from: "2.11.0")
    ],
  targets: [
    .target(name: "SomeProject", dependencies: ["RxOperators"])
    ]
)
$ swift build

作者

Voidilov, [email protected]

许可

RxOperators 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。