# ReactiveCocoa
**Repository Path**: mrxir/ReactiveCocoa
## Basic Information
- **Project Name**: ReactiveCocoa
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-11-14
- **Last Updated**: 2024-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

Reactive extensions to Cocoa frameworks, built on top of ReactiveSwift.
[](#carthage) [](#cocoapods) [](#swift-package-manager) [](https://github.com/ReactiveCocoa/ReactiveCocoa/releases)  
⚠️ [Looking for the Objective-C API?][]
🎉 [Migrating from RAC 4.x?][CHANGELOG]
🚄 [Release Roadmap](#release-roadmap)
## What is ReactiveSwift?
__ReactiveSwift__ offers composable, declarative and flexible primitives that are built around the grand concept of ___streams of values over time___. These primitives can be used to uniformly represent common Cocoa and generic programming patterns that are fundamentally an act of observation.
For more information about the core primitives, see [ReactiveSwift][].
## What is ReactiveCocoa?
__ReactiveCocoa__ wraps various aspects of Cocoa frameworks with the declarative [ReactiveSwift][] primitives.
1. **UI Bindings**
UI components expose [`BindingTarget`][]s, which accept bindings from any
kind of streams of values via the `<~` operator.
```swift
// Bind the `name` property of `person` to the text value of an `UILabel`.
nameLabel.reactive.text <~ person.name
```
_Note_: You'll need to import ReactiveSwift as well to make use of the `<~` operator.
1. **Controls and User Interactions**
Interactive UI components expose [`Signal`][]s for control events
and updates in the control value upon user interactions.
A selected set of controls provide a convenience, expressive binding
API for [`Action`][]s.
```swift
// 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)
```
1. **Declarative Objective-C Dynamism**
Create signals that are sourced by intercepting Objective-C objects,
e.g. method call interception and object deinitialization.
```swift
// 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)
```
1. **Expressive, Safe Key Path Observation**
Establish key-value observations in the form of [`SignalProducer`][]s and
`DynamicProperty`s, and enjoy the inherited composability.
```swift
// 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(object: person,
keyPath: #keyPath(person.name))
```
But there are still more to be discovered and introduced. Read our in-code documentations and release notes to
find out more.
## Getting started
ReactiveCocoa supports macOS 10.9+, iOS 8.0+, watchOS 2.0+, and tvOS 9.0+.
#### Carthage
If you use [Carthage][] to manage your dependencies, simply add
ReactiveCocoa to your `Cartfile`:
```
github "ReactiveCocoa/ReactiveCocoa" ~> 10.1
```
If you use Carthage to build your dependencies, make sure you have added `ReactiveCocoa.framework` and `ReactiveSwift.framework` to the "_Linked Frameworks and Libraries_" section of your target, and have included them in your Carthage framework copying build phase.
#### CocoaPods
If you use [CocoaPods][] to manage your dependencies, simply add
ReactiveCocoa to your `Podfile`:
```
pod 'ReactiveCocoa', '~> 10.1'
```
#### Swift Package Manager
If you use Swift Package Manager, simply add ReactiveCocoa as a dependency
of your package in `Package.swift`:
```
.package(url: "https://github.com/ReactiveCocoa/ReactiveCocoa.git", branch: "master")
```
#### Git submodule
1. Add the ReactiveCocoa repository as a [submodule][] of your
application’s repository.
1. Run `git submodule update --init --recursive` from within the ReactiveCocoa folder.
1. Drag and drop `ReactiveCocoa.xcodeproj` and `Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj` into your application’s Xcode
project or workspace.
1. On the “General” tab of your application target’s settings, add
`ReactiveCocoa.framework` and `ReactiveSwift.framework` to the “Embedded Binaries” section.
1. If your application target does not contain Swift code at all, you should also
set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”.
## Have a question?
If you need any help, please visit our [GitHub issues][] or [Stack Overflow][]. Feel free to file an issue if you do not manage to find any solution from the archives.
## Release Roadmap
**Current Stable Release:**
[](https://github.com/ReactiveCocoa/ReactiveCocoa/releases)
### In Development
### Plan of Record
#### ABI stability release
ReactiveCocoa is expected to declare library ABI stability when Swift rolls out resilience support in Swift 5. Until then, ReactiveCocoa will incrementally adopt new language features.
[ReactiveSwift]: https://github.com/ReactiveCocoa/ReactiveSwift
[ReactiveObjC]: https://github.com/ReactiveCocoa/ReactiveObjC
[GitHub issues]: https://github.com/ReactiveCocoa/ReactiveCocoa/issues?q=is%3Aissue+label%3Aquestion+
[Stack Overflow]: http://stackoverflow.com/questions/tagged/reactive-cocoa
[CHANGELOG]: CHANGELOG.md
[Carthage]: https://github.com/Carthage/Carthage
[CocoaPods]: https://cocoapods.org/
[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
[Looking for the Objective-C API?]: https://github.com/ReactiveCocoa/ReactiveObjC
[Still using Swift 2.x?]: https://github.com/ReactiveCocoa/ReactiveCocoa/tree/v4.0.0
[`Signal`]: https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/FrameworkOverview.md#signals
[`SignalProducer`]: https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/FrameworkOverview.md#signal-producers
[`Action`]: https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/FrameworkOverview.md#actions
[`BindingTarget`]: https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/FrameworkOverview.md#properties