在 Cocoa 框架中扩展响应式功能,基于 ReactiveSwift 构建。
什么是 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
以供控制事件和用户交互时更新的控件值。一组精选控件为
Action
提供了方便、富有表现力的绑定性 API。// 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)
-
富有表现力、安全的 Key Path 观察机制
以
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 Package Manager
如果您使用 Swift Package Manager,只需将 ReactiveCocoa 添加为您的包的依赖项,并在 Package.swift
中指定。
.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
构建设置设置为“是”。
有什么问题吗?
如果您需要任何帮助,请访问我们的GitHub问题或Stack Overflow。如果您在存档中找不到任何解决方案,请随时提出问题。
发布路线图
开发中
历史计划
ABI稳定性发布
当 Swift 5 发布具有弹性支持时,ReactiveCocoa 预计会声明库的 ABI 稳定性。在此之前,ReactiveCocoa 将逐步采用新的语言功能。