Git Product home page Git Product logo

awesome-reactivecocoa's Introduction

ReactiveCocoa, Functional Reactive Programming, and MVVM isn't easy to understand (especially for an Object Oriented developer), so here's a few good things to look at (from my experience). Note that most of these are in Objective C (my language of choice when I first started to learn RAC). Some are in other languages (Haskell, Scala, Erlang) but none are in Swift. By design, I've decided to make a separate list for Swift and RAC 3.0

RAC 2.5 Reads
  • Zweitag FRP Breakdown: Before you jump into RAC, it's probably a good idea to learn a thing or 2 about what functional programming really is
  • RXMarbles: Really cool demonstrations of reactive programming operators in RX
  • RX Website: This pretty much gives a visual representation of ALL the reactive operators. Remember, RX came before RAC, and a lot of major RACStream and RACSignal methods have an RX equivalent. For example, flattenMap corresponds to SelectMany (in LINQ talk) or FlatMap in RX talk. Dont forget that an Observable is pretty much a Signal and an Enumerable is pretty much a Sequence
  • Atomic Object Bunch of articles from a really respected iOS development consultant group
  • Yalantis Reactive Programming Objective-C: Some great examples and visuals are abundant
  • How I Learned to Write Custom Signals in Reactive Cocoa: RACSignal Tutorial
  • ifNotApps: Great overall breakdown. Comes with this practice project which has tons of various exmaples RACExample
  • ExpressiveReactiveCocoa: Before you do anything RAC related, make sure to give this presentation a peak!
  • RACDesignPatterns: Definitely not the best site in the world, but I thought it was worth a read through. Definitely a conecpt that needs to be expanded on
  • RAC Performance: Investigation of RAC performance
  • RAC + MVVM introduction: One of the clearest write-ups I've ever seen. Great visuals
  • Modern Concurrency: Erlang, Scala, Go, Clojure: Really good presentation about what makes functional programming awesome in other languages. Let me just try to summarize quickly with some talking points
    • Remember, concurrency is not parallelism!
    • Also, locks are awful.
    • "Actor" is a state (Scala) VS. passing state as an argument (Erlang).
    • "Rough analogy: writing to a file by name (process, Erlang) vs. writing to a file descriptor (channel, Go)." (c) Rob Pike

    • Why functional programming matters in Clojure: Side-effect free functions and Deterministic functions/calculations
    • There is no silver bullet -- Use most natural approach for your technology / OP (there are many STM implementations, but in Clojure it's idiomatic and part of the core) -- Look deeply into your domain (presenters usually use most convenient case(s) to tell about functionality) -- Use "unusual" approach but remember that on this way only conventions rule If you need distributed concurrency - look at actors
    • For Scala developers from Jonas Boner : Start with deterministic, declarative, immutable core -- Add indeterminism selectively (actors) -- Add mutability selectively (STM) -- Finally: add locks and explicit threads -- check out these slides
  • twocentstudios: a friendly, project based introduction to RAC
  • RAC TableView Binding: An exploration of using RAC to update the contents of a UITableView
  • Ray Wenderlich: Some people like these
  • Ash Furrow Video: Great presentation by one of RAC's leading voices
  • Cocoa Samuri: Introduction that everyone is referring to
  • Reactive Cookbook: Cookbook for a few reactive cococa things. Comes with this example
  • Bi-directional data bindings with RACChannel: If you want to really push your knowledge of RAC, this is an interesting read
  • RAC Changelog: You've probably already read the RAC documentation (highly recommended). However, you probably haven't read this
  • Reactive Cocoa and Ruby Motion: If you HAVE to use Ruby Motion, you might want to check out this set up guide for getting your RAC code up and running
RAC 3.0+ Reads

ReactiveCocoa should transform EVERYTHING when it comes to writing iOS code so here's a bunch of projects that should make your RAC transtion a little bit smoother

RAC 2.5 Projects
  • Functional Reactive Pixels (FRP): A great project from the zen master Ash Furrow. Featured in his book

  • ExpressiveReactiveCocoa: Before you do anything RAC related, make sure to give this presentation a peak!

  • RACAction: Make your RACCommands look like Swith and RAC 3.0 's RACAction!

  • 101 RAC Samples: 101 different examples of using RAC :) I;m pretty sure that this is inspired by 101 RX Samples

  • Bizhi: the holy grail of example projects. uses objection + reactivecocoa (my favs) + AFNetworking + UICollectionView

  • Typhoon + Core Data + RAC: The holy grail for those who prefer Typhoon over aObjection

  • RateStuff: Another RAC + Typhoon example

  • Firebase + RACExtensions: a lib that adds extension abilities to Firebase. I find this ultra awesome for dynamic user interfaces in need of live updates

  • UIGestureRecognizer-RACExtension: Adds UIGestureRecognizer extensions to RAC

  • ReactiveCocoaLayout: an awesome lib for creating animations with ReactiveCocoa

  • ReactiveViewModel: a library that shows, by example, how to use the MVVM design pattern

  • ReactiveCoreData: Below is an example of how this lib can be used. ReactiveCocoaLayout brings RAC code to the most obnoxious parts of iOS ibrary (I'm looking at you, autolayout!)

          RAC(self.filteredParents) = [[[[Parent findAll]
            where:@"name" contains:filterText options:@"cd"]
            sortBy:@"name"]
            fetchWithTrigger:objectsChanged];
    
  • CETableViewBinding: A library that makes the somewhat overwhleming task of using RAC with UITableViews less obnoxious

  • Bikes: A great example project for proper use of the MVVM pattern built by some guy over at TimeHop

  • Reactive+iBeacon: Very Very cool lib that makes your iPhone discoverable in an NFC environment

  • MMPReactiveCoreLocation: CoreLocation annoyances made less annoying with RAC

  • LibExtobj: This is a library that gives you some cool little additions, most notably @weakify(self) and @strongify(self)

  • OctoKit: A massive project undertaking from the makers of RAC. A good project to look at if you need ideas on RAC

  • Artsy/Eigen: From one of RAC's biggest supporters, Ash Furrow

  • *RACCommandExample: An incredibly insightful example project that accompanies this blog post

  • AFNetworking-RACExtensions: Incredibly helpful RACifying AFNetworking code! Would be pretty difficult to build by yourself (check out this blog post too)

      AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
      manager.requestSerializer = [AFJSONRequestSerializer serializer];
      manager.responseSerializer = [AFJSONResponseSerializer serializer];
      [[manager rac_GET:path parameters:params] subscribeNext:^(RACTuple *JSONAndHeaders) {
              //Voila, a tuple with (JSON, HTTPResponse)
      }];
    
  • SKPKeyboardAwareness: Aha! Now we really can see some power of RAC. This lib uses it to understand the presence of a keyboard (which is really annoying ususally) // shpka_rac_notifyUntilDealloc is our own convenience method that returns // a signal with a notification that completes when the receiver deallocates. RACSignal *keyboardSignal = [self shpka_rac_notifyUntilDealloc:UIKeyboardWillShowNotification];

      // viewSignal is a signal that fires whenever a UITextField or UITextView becomes first responder.
      RACSignal *viewSignal = [RACSignal merge:@[
      [self shpka_rac_notifyUntilDealloc:UITextFieldTextDidBeginEditingNotification],
        [self shpka_rac_notifyUntilDealloc:UITextViewTextDidBeginEditingNotification]]
      ];
      // The two signals above, combined in a ‘zip’, meaning that one of the zipped signals
      // will wait for the other before combinedShowSignal is fired.
      RACSignal *combinedShowSignal = [RACSignal zip:@[viewSignal,keyboardSignal]];
    
  • MVVM iOS Example: Solid introduction to the MVVM design pattern

  • ReactiveCocoa-IO: Use RAC for file IO!!

  • RAC-Parse: If you're dumb enough to use Parse, then you better use RAC - you're gonna need it!

  • RAC-Example: Another example. Nt bad

  • RAC-Playground: Someone's playground project

  • Expecta+RAC: LOVE THIS. Expecta is the testing framework that's great for MVVM. It only makes sense to add RAC support!

  • LLRreactiveMatchers: Just like the one above. LLReactiveMatchers should be able to cover most of the reasons you want to test Signals. One matcher = One Subscription, n Matchers = n Subscriptions. Tests that compose on top of Subjects should use LLSignalTestRecorder and expectations should be made on the recorder.

          NSMutableArray *sentValues = [NSMutableArray array];
          NSArray *expected = @[@0, @1, @2];
          BOOL hasCompleted = NO;
              [signal subscribeNext:^(id value) {
          [sentValues addObject:value];
          } completed:^{
          hasCompleted = YES;
          }];
          expect(hasCompleted && [sentValues isEqualToArray:expected]).will.beTruthy();
    
  • RAC+BLE: RAC support for Buletooth low energy communication with core bluetooth

  • Simple Weather: Awesome test project that uses RAC and Mantle

  • RAC+RestKit: RAC support for RestKit- awesomeness. RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X

  • Ash Furrow Func Reactive Demo: Because ash furrow. A small demonstration of how to use ReactiveCocoa in iOS applications

  • RAC+Healthkit: Because it's awesome to get live health updates

  • RAC+Pull-To-Refresh: Demonstrates networking, JSON parsing, displaying in a tableView and implementing pull-to-refresh using ReactiveCocoa, also laid out using MVVM pattern

  • RAC+Accounts Framework: RACSupport for Accounts

  • RAC+AlertAction: Ash Furrow made it. Pretty useful for this scenario

  • RAC+Notification: RAC for push notis

  • RAC+Reachability: Needs work but you get the idea

  • Loverly: AFNetworking, ReactiveCocoa+MVVM, Pop

  • RAC+Evernote: For the Evernote SDK

  • RACSnippets: Various RAC Snippets. This project is really really good. Possibly my favorite RACExample project. It has a whole bunch of different cases in which you might use RAC. These cases are listed below

    • Use 'then' and 'take'
    • Simple MVVM
    • Notification with RAC
    • UITableView and reloadData
    • Waterfall (with SDWebImage)
    • RAC and RACObserve and map
    • use 'tryMap'
    • Repeat after TimeInterval
    • RACCommand
    • Auto Fetch access token
    • Use TakeUntil with Cell
    • Deal Multiple Errors
  • RAC+PullToRefresh: Refresh control written in RAC

  • C-41: Yet another fantastic Ash Furrow project. This guy seriously knows his stuff. This project is great not only in it's completeness, but also because it is fully tested with Expecta, Specta, and OCMock

  • Reactive Cocoa Playground: Made by the guy who made that highly quoted MVVM article. Lots of really good examples

  • RAC Ruby Motion: An example project for these "special" developers

  • ReactiveCocoaExample: Good prohect that shows how to use RAC with a UISearchBar over a UITableView

RAC 3.0+ Projects
Wow - you might be saying to yourself... "THERE'S SO MANY PROJECTS!" OKAAY. I'LL LIST MY FAVORITE ONES IN ORDER
RAC 2.5 Example Projects
  1. RACSnippets
  2. Functional Reactive Pixels (Ash Furrow)
  3. C-41 (Ash Furrow)
  4. RACExample
  5. 101 RAC Examples
  6. Artsy/Eigen (Ash Furrow)
  7. Func Reactive Demo (Ash Furrow)
  8. RACCommand Example
  9. Bizhi
  10. Reactive Cocoa Playground
  11. Bikes
RAC 3.0+ Example Projects
RAC 2.5 +Extensions
  1. AFNetworking + RACExtensions
  2. Expecta + RAC
  3. CETableViewBinding
RAC 3.0+ Extensions

awesome-reactivecocoa's People

Contributors

hsavit1 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.