Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Reactivecocoa | 19,976 | 3,283 | 3 months ago | 113 | November 20, 2021 | 6 | mit | Swift | ||
Cocoa framework and Obj-C dynamism bindings for ReactiveSwift. | ||||||||||
Moya Objectmapper | 446 | 94 | 3 years ago | 28 | January 26, 2020 | 11 | mit | Swift | ||
ObjectMapper bindings for Moya and RxSwift | ||||||||||
Moya Modelmapper | 134 | 38 | 3 years ago | 27 | February 18, 2020 | 6 | mit | Swift | ||
ModelMapper bindings for Moya. | ||||||||||
Moya Gloss | 37 | 6 | 5 years ago | 11 | January 26, 2018 | 2 | mit | Swift | ||
Gloss bindings for Moya | ||||||||||
Moya Unbox | 18 | 5 years ago | 2 | mit | Swift | |||||
[DEPRECATED!!] Unbox bindings for Moya and RxSwift | ||||||||||
Ackreactiveextensions | 17 | 1 | 5 months ago | 29 | February 15, 2022 | 4 | mit | Swift | ||
Set of useful extensions for ReactiveSwift & ReactiveCocoa | ||||||||||
Moyaobjectmapper | 11 | 6 years ago | 4 | mit | Swift | |||||
ObjectMapper bindings for Moya, RxSwift and ReactiveSwift | ||||||||||
Moya Marshal | 10 | 6 years ago | 1 | mit | Swift | |||||
Marshal bindings for Moya, RxSwift and ReactiveCocoa | ||||||||||
Pixabayswiftuicombine | 9 | 4 years ago | mit | Swift | ||||||
Sample app implementing MVVM using SwiftUI and Combine to search for images on pixabay.com | ||||||||||
Moyaunbox | 3 | 4 years ago | 1 | mit | Swift | |||||
Unbox bindings for Moya, RxSwift and ReactiveSwift |
Reactive extensions to Cocoa frameworks, built on top of ReactiveSwift.
⚠️ Looking for the Objective-C API?
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.
ReactiveCocoa wraps various aspects of Cocoa frameworks with the declarative ReactiveSwift primitives.
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 <~ person.name
Note: You'll need to import ReactiveSwift as well to make use of the <~
operator.
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 <~ 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)
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)
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<String>(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.
ReactiveCocoa supports macOS 10.9+, iOS 8.0+, watchOS 2.0+, and tvOS 9.0+.
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.
If you use CocoaPods to manage your dependencies, simply add
ReactiveCocoa to your Podfile
:
pod 'ReactiveCocoa', '~> 10.1'
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 update --init --recursive
from within the ReactiveCocoa folder.ReactiveCocoa.xcodeproj
and Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
into your application’s Xcode
project or workspace.ReactiveCocoa.framework
and ReactiveSwift.framework
to the “Embedded Binaries” section.EMBEDDED_CONTENT_CONTAINS_SWIFT
build setting to “Yes”.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.
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.