ReactiveCocoa 中文文档翻译。目前由 @没故事的卓同学 和 @halffrost 维护翻译。
Cocoa 框架的响应式扩展框架,基于 ReactiveSwift
ReactiveSwift 为处理___随着时间传递的数据流___ 提供了可组合、声明式和灵活的基本元素(primitives)。这些基本元素用于统一表示基于观察的常见 Cocoa 和通用编程模式。
更多关于核心基本元素的信息,查看 ReactiveSwift 。
ReactiveCocoa 通过使用声明式的 ReactiveSwift 基本元素包含了 Cocoa 框架的多个方面的编程模式。
-
绑定 UI
UI 组件公开
BindingTarget
,通过<~
操作符绑定任意类型数据流的值。// 把 `person` 的 `name` 属性绑定到 `UILabel` 的文字上 nameLabel.text <~ person.name
-
控件和用户的交互
可交互的 UI 组件通过公开
Signal
用于事件响应和通过用户的交互更新控件的值。为一些控件绑定
Action
提供了方便快捷的 API 。// 当 toggle 被点击时 `allowsCookies` 的值就会更新 preferences.allowsCookies <~ toggle.reactive.isOnValues // 根据 textField 中用户的输入实时输出当前文本的字符长度 textField.reactive.continuousTextValues.map { $0.characters.count } // 当按钮被点击时触发 `commit` button.reactive.pressed = CocoaAction(viewModel.commit)
-
声明式的 Objective-C 动态机制
通过拦截 Objective-C 对象消息生成信号, 比如下面例子中方法调用的拦截和对象释放。
// 每次在 `viewWillAppear(_:)` 调用后都会被通知 let appearing = view.reactive.trigger(for: #selector(viewWillAppear(_:))) // 观察 `object` 的生命周期 object.reactive.lifetime.ended.observeCompleted(doCleanup)
-
易读、 安全的 KVO
把 KVO 机制用
SignalProducer
和DynamicProperty
的形式表示,可以方便的继承合成。// 当对象 `keyPath` 的值变化时发送这个值的 producer // // 当 `self` 的生命周期结束时停止 KVO let producer = object.reactive.values(forKeyPath: #keyPath(key)) .take(during: self.reactive.lifetime) // property 是 person 对应的 keyPath 的值。对这个对象是弱引用(weak reference)。 let property = DynamicProperty<String>(object: person, keyPath: #keyPath(person.name))
这里还有一些值得介绍的特性。请阅读我们代码内的文档和发布版的 notes 了解更多内容吧。
ReactiveCocoa 支持 macOS 10.9+, iOS 8.0+, watchOS 2.0+, 和 tvOS 9.0+.
如果你使用 Carthage 来管理你项目中的依赖,只需要很简单的把
ReactiveCocoa 添加到你的 Cartfile
文件中:
github "ReactiveCocoa/ReactiveCocoa"
如果你使用 Carthage 去编译你项目中的依赖,请确保你已经添加ReactiveCocoa.framework
, ReactiveSwift.framework
和 Result.framework
到你项目target下的 "Linked Frameworks and Libraries" 一栏中, 并且已经在 Carthage framework 的 build phase 里面包含了它们。
如果你使用 CocoaPods 去管理你项目中的依赖, 只需要很简单的把
ReactiveCocoa 添加到你的 Podfile
文件中:
pod 'ReactiveCocoa', :git => 'https://github.com/ReactiveCocoa/ReactiveCocoa.git'
- 把 ReactiveCocoa 代码库以 submodule 的形式添加到你自己项目的代码中。
- 在 ReactiveCocoa 的文件夹中,运行
git submodule update --init --recursive
命令。 - 把
ReactiveCocoa.xcodeproj
,Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
, 和Carthage/Checkouts/Result/Result.xcodeproj
这三者拖到你项目所在的 project 或者 workspace 中。 - 在你项目的 target 设置中找到 “General” 选项卡, 把
ReactiveCocoa.framework
,ReactiveSwift.framework
, 和Result.framework
添加到 “Embedded Binaries” 一项中. - 如果你的项目 target 中一点也不包含 Swift 的代码,你需要把编译设置中的
EMBEDDED_CONTENT_CONTAINS_SWIFT
设置为 “Yes”.
如果你需要任何的帮助,请访问我们的 GitHub issues 或者 Stack Overflow. 如果没有找到问题的解决办法,请提交一个 issue 给我们。