基于 ReactiveSwift 构建的面向 Cocoa 框架的响应式扩展。
什么是 ReactiveSwift?
ReactiveSwift 提供了一组可组合的、声明性的和灵活的原始函数,这些原始函数围绕时间价值流的概念构建。这些原始函数可以用来统一表示 Cocoa 和通用编程模式,这些模式本质上是一种观察行为。
关于核心原始函数的更多信息,请参阅 ReactiveSwift。
什么是 ReactiveCocoa?
ReactiveCocoa 使用 ReactiveSwift 的声明性原始函数封装了 Cocoa 框架的各个方面。
-
UI 绑定
UI 组件通过使用操作符
<~
接受来自任何类型值流的绑定,将BindingTarget
暴露出来。// Bind the `name` property of `person` to the text value of an `UILabel`. nameLabel.reactive.text <~ person.name
注意:您需要导入 ReactiveSwift 才能使用操作符
<~
。 -
控件和用户交互
交互式 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)
-
基于声明的 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)
-
富有表达性、安全的键路径观察
以
SignalProducer
和DynamicProperty
的形式建立键值观察,并享受继承的可组合性。// 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.framework
和 ReactiveSwift.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 子模块
- 将 ReactiveCocoa 仓库添加为您的应用程序仓库的 子模块。
- 在 ReactiveCocoa 文件夹内运行
git submodule update --init --recursive
命令。 - 将
ReactiveCocoa.xcodeproj
和Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
拖放到您的应用程序的 Xcode 项目或工作空间中。 - 在应用程序目标的“通用”设置选项卡的“已安装框架与库”部分添加
ReactiveCocoa.framework
和ReactiveSwift.framework
。 - 如果您应用程序的目标完全不包含 Swift 代码,您还应该将构建设置
EMBEDDED_CONTENT_CONTAINS_SWIFT
设置为 “Yes”。
有问题?
如果您需要帮助,请访问我们的 GitHub 问题 或 Stack Overflow。如果您在存档中找不到任何解决方案,请随时提交问题。
发布路线图
开发中
记录计划
ABI稳定性版本
ReactiveCocoa 在 Swift 5 推出弹性支持时预计将声明库的 ABI 稳定性。在此之前,ReactiveCocoa 将逐步采用新的语言特性。