The vision of Functional Reactive Programming (FRP) and specifically ReactiveCococa (RAC) 4.0 alpha are both impressive. FRP via RAC and Swift feels right. As mentioned in my previous article, RAC 4.0 is useable. Its core concepts are quite solid. Yet, one has to really want to dive in and be willing to offset any UIKit shortcomings. That’s fair since RAC 4.0 is alpha.
Where ReactiveCocoa needs more help:
- There is a need for the ReactiveCocoa CocoaPods spec to be updated
- There is a need for more UIKit extensions
Need for Updated ReactiveCocoa CocoaPods spec
That’s probably easy for one to do since it’s an update to an existing pod spec. If one doesn’t have time or want to, one can use Carthage as mentioned in my previous article, Swift 2 ReactiveCocoa MVVM Quest.
More UIKit Extensions
Based on a post here by Neil Pankey (a collaborator on ReactiveCocoa), Rex is a ReactiveCocoa Extensions project that eventually will get merged into ReactiveCocoa. As Neil mentions:
It’s not there yet, because “..haven’t found the time to port them, flush out the missing properties, add documentation, etc”
Although it has some extensions, more are needed. I immediately came up for the need for an extension that would let me capture text in a UITextField. Digging deeper I see in a somewhat older post, that there are many extensions that need to be ported over to Swift. Looking at Rex UIKit specific code myself, I think that’s still the case. If the community rallies around making more UIKit Extensions, it would help everyone.
To address what I needed now, I used a fork of ReactiveTwitterSearch originally made by Colin Eberhardt, and grabbed the UIKitExtensions code and a couple other items. Doing that, I was able to bind the text put into a text field straight into a View Model like so:
loginViewModel.username <~ usernameTextField.rac_text
That line of code is quite similar to the awesome but dated article RAC 3 Properties section of MVVM with ReactiveCocoa 3.0.
So, that is neat and powerful since with some easy to read binding/configuration one is making it much easier to do MVVM. As long as you don’t mind, piecing things together and absorbing the learning curve, this power is yours for the taking now.