ReactiveMapKit 12.0.0

ReactiveMapKit 12.0.0

测试已测试
语言 SwiftSwift
许可 NOASSERTION
发布上次发布Nov 2021
SPM支持 SPM

Anders HaSyo IkedaMichael BrownRui Peres 维护。



  • ReactiveCocoa

ReactiveCocoa

基于 ReactiveSwift 构建的面向 Cocoa 框架的响应式扩展。

Join the ReactiveSwift Slack community.


Carthage compatible CocoaPods compatible SwiftPM compatible GitHub release Swift 5.1 platforms

⚠️ 在寻找 Objective-C API 吗?

🎉 正在迁移 RAC 4.x 吗?

🚄 发布路线图

什么是 ReactiveSwift?

ReactiveSwift 提供了一组可组合的、声明性的和灵活的原始函数,这些原始函数围绕时间价值流的概念构建。这些原始函数可以用来统一表示 Cocoa 和通用编程模式,这些模式本质上是一种观察行为。

关于核心原始函数的更多信息,请参阅 ReactiveSwift

什么是 ReactiveCocoa?

ReactiveCocoa 使用 ReactiveSwift 的声明性原始函数封装了 Cocoa 框架的各个方面。

  1. UI 绑定

    UI 组件通过使用操作符 <~ 接受来自任何类型值流的绑定,将 BindingTarget 暴露出来。

    // Bind the `name` property of `person` to the text value of an `UILabel`.
    nameLabel.reactive.text <~ person.name

    注意:您需要导入 ReactiveSwift 才能使用操作符 <~

  2. 控件和用户交互

    交互式 UI 组件在用户交互时暴露表示控制事件更新的 Signal,并更新控制值。

    选择一组控件,提供了一个方便、富有表达力的绑定API来绑定到 Action

    // Update `allowsCookies` whenever the toggle is flipped.
    preferences.allowsCookies <~ toggle.reactive.isOnValues
    
    // Compute live character counts from the continuous stream of user initiated
    // changes in the text.
    textField.reactive.continuousTextValues.map { $0.characters.count }
    
    // Trigger `commit` whenever the button is pressed.
    button.reactive.pressed = CocoaAction(viewModel.commit)
  3. 基于声明的 Objective-C 动态性

    创建通过拦截 Objective-C 对象(例如,方法调用拦截和对象析构)获取的信号。

    // Notify after every time `viewWillAppear(_:)` is called.
    let appearing = viewController.reactive.trigger(for: #selector(UIViewController.viewWillAppear(_:)))
    
    // Observe the lifetime of `object`.
    object.reactive.lifetime.ended.observeCompleted(doCleanup)
  4. 富有表达性、安全的键路径观察

    SignalProducerDynamicProperty 的形式建立键值观察,并享受继承的可组合性。

    // A producer that sends the current value of `keyPath`, followed by
    // subsequent changes.
    //
    // Terminate the KVO observation if the lifetime of `self` ends.
    let producer = object.reactive.producer(forKeyPath: #keyPath(key))
    	.take(during: self.reactive.lifetime)
    
    // A parameterized property that represents the supplied key path of the
    // wrapped object. It holds a weak reference to the wrapped object.
    let property = DynamicProperty<String>(object: person,
                                           keyPath: #keyPath(person.name))

但仍有许多待发现和介绍。请阅读我们的代码文档和发行说明来获取更多信息。

入门指南

ReactiveCocoa 支持 macOS 10.9+、iOS 8.0+、watchOS 2.0+ 和 tvOS 9.0+。

Carthage

如果您使用 Carthage 管理依赖项,只需将 ReactiveCocoa 添加到您的 Cartfile

github "ReactiveCocoa/ReactiveCocoa" ~> 10.1

如果您使用 Carthage 构建依赖项,请确保已将 ReactiveCocoa.frameworkReactiveSwift.framework 添加到目标的 "Linked Frameworks and Libraries" 部分,并在 Carthage 框架复制构建阶段中包含它们。

CocoaPods

如果您使用 CocoaPods 管理依赖项,只需将 ReactiveCocoa 添加到您的 Podfile

pod 'ReactiveCocoa', '~> 10.1'

Swift 包管理器

如果您使用 Swift 包管理器,只需在 Package.swift 将 ReactiveCocoa 添加为您的包的依赖项。

.package(url: "https://github.com/ReactiveCocoa/ReactiveCocoa.git", branch: "master")

Git 子模块

  1. 将 ReactiveCocoa 仓库添加为您的应用程序仓库的 子模块
  2. 在 ReactiveCocoa 文件夹内运行 git submodule update --init --recursive 命令。
  3. ReactiveCocoa.xcodeprojCarthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj 拖放到您的应用程序的 Xcode 项目或工作空间中。
  4. 在应用程序目标的“通用”设置选项卡的“已安装框架与库”部分添加 ReactiveCocoa.frameworkReactiveSwift.framework
  5. 如果您应用程序的目标完全不包含 Swift 代码,您还应该将构建设置 EMBEDDED_CONTENT_CONTAINS_SWIFT 设置为 “Yes”。

有问题?

如果您需要帮助,请访问我们的 GitHub 问题Stack Overflow。如果您在存档中找不到任何解决方案,请随时提交问题。

发布路线图

当前稳定版本
GitHub release

开发中

记录计划

ABI稳定性版本

ReactiveCocoa 在 Swift 5 推出弹性支持时预计将声明库的 ABI 稳定性。在此之前,ReactiveCocoa 将逐步采用新的语言特性。