Swift Shell reactiveswift reactivecocoa Ruby Objective-C
Need help with ReactiveCocoa?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.
ReactiveCocoa

Description

Cocoa framework and Obj-C dynamism bindings for ReactiveSwift.

19.9K Stars 3.5K Forks Other 8.6K Commits 52 Opened issues

Services available

Need anything else?

ReactiveCocoa

Reactive extensions to Cocoa frameworks, built on top of ReactiveSwift.

Join the ReactiveSwift Slack community.


Carthage compatible CocoaPods compatible SwiftPM compatible GitHub release Swift 5.1 platforms

⚠️ Looking for the Objective-C API?

🎉 Migrating from RAC 4.x?

🚄 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.
    
    // Bind the `name` property of `person` to the text value of an `UILabel`.
    nameLabel.reactive.text 
    

    Note: You'll need to import ReactiveSwift as well to make use of the

     operator.
  2. 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.

    // Update `allowsCookies` whenever the toggle is flipped.
    preferences.allowsCookies 
  3. Declarative Objective-C Dynamism

    Create signals that are sourced by intercepting Objective-C objects, e.g. method call interception and object deinitialization.

    // 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. Expressive, Safe Key Path Observation

    Establish key-value observations in the form of

    SignalProducer
    s and

    DynamicProperty
    s, and enjoy the inherited composability.
    // 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.
  2. Run
    git submodule update --init --recursive
    from within the ReactiveCocoa folder.
  3. Drag and drop
    ReactiveCocoa.xcodeproj
    and
    Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
    into your application’s Xcode project or workspace.
  4. On the “General” tab of your application target’s settings, add
    ReactiveCocoa.framework
    and
    ReactiveSwift.framework
    to the “Embedded Binaries” section.
  5. 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:
GitHub release

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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.