Eliasz Sawicki

Eliasz Sawicki

iOS developer from Gdansk

ReactiveCocoa UI bindings with Rex

- 1 min

Today, we will take a closer look at Rex - ReactiveCocoa extensions. I find Rex pretty helpful when working with ReactiveCocoa, especially creating UI bindings.

If you are binding your view model with UI layer, Rex will let you do it much easier with it’s extensions to UIControls. Here are some examples of Rex usage.

UIButton

let cocoaAction = CocoaAction(action) { _ in }

//without Rex
button.addTarget(cocoaAction, action: CocoaAction.selector, forControlEvents: .TouchUpInside)

//with Rex extensions
button.rex_pressed.value = cocoaAction

UITextField, UILabel, MutableProperty

var titleValue = MutableProperty<String?>(nil)

//without Rex
textField.rac_textSignal().subscribeNext {
self.titleValue.value = $0 as? String
}

titleValue.producer.startWithNext {
self.label.text = $0
self.label.hidden = $0?.characters.count < 5
}

//with Rex
titleValue <~ textField.rex_text
titleLabel.rex_text <~ titleValue
titleLabel.rex_hidden <~ titleValue.producer.map({ $0?.characters.count < 5 })

You can clearly see that Rex makes our bindings much easier to read and understand. These are just examples, but you can find much more interesting properties like rex_selectedSegmentIndex for UISegmentedControl or rex_on for UISwitch. Moreover, Rex comes with some handy signal transformations, so go check it out!

This article is cross-posted with my my company blog

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora