Skip to content

colatusso/Observable.Swift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Observable.Swift

UPDATE: Now you can add as much switches as you need, check the example project.

With this small piece of code (Observable.swift) you will be able to add reactivity programming to your app.
Simple, useful and easy to use.

var n = Observable(1)
var c: Int = 0

n.valueDidChange = { [unowned self] in
    c = n.value // 2 then 3
}

n.value = 2
c // 2
n.value = 3
c // 3

// we can create and combine signals with Observable<T> properties

ObservableSwitch:
With the ObservableSwitch you are able to combine signals and run some code depending on the status result.
You can specify the bool state you are expecting to run the closure (available: .AnyState, .OnlyTrue, .OnlyFalse).
Bellow we:

  • enable/disable a UIButton based on the length of the username and password fields.
  • check for strong passwords (length > 10)
  • check for the master password (.OnlyTrue)
// signin enabler switch
let obSwitch = ObservableSwitch(.AnyState)
obSwitch.action = { [unowned self] (status: Bool) -> () in
    self.signin.alpha   = (status) ? 1 : 0.5
    self.signin.enabled = status
}

// strong passwords switch
let obSwitchGreatPassword = ObservableSwitch(.AnyState)
obSwitchGreatPassword.action = { [unowned self] (status: Bool) -> () in
    self.signin.backgroundColor = (status) ? UIColor.green : UIColor.blue
}

// master password switch
let obSwitchMasterPassword = ObservableSwitch(.OnlyTrue)
obSwitchMasterPassword.action = { [unowned self] (status: Bool) -> () in
    let alertController = UIAlertController(title: "I know!", message: "It rocks!!!", preferredStyle: .alert)
    let action = UIAlertAction(title: "=)", style: .default, handler: nil)
    alertController.addAction(action)
    
    self.present(alertController, animated: true, completion: nil)
}

// adding the signals to the ObservableTextField properties
self.username.addSignal({ [unowned self] in self.username.count >= 4 }, toSwitch: obSwitch)
self.password.addSignal({ [unowned self] in self.password.count >= 4 }, toSwitch: obSwitch)
self.password.addSignal({ [unowned self] in self.password.count > 10 }, toSwitch: obSwitchGreatPassword)        
self.password.addSignal({ [unowned self] in self.password.text == "swift rocks" }, toSwitch: obSwitchMasterPassword)

Alt text

ObservableTextField:

self.textField.textDidChange = { [unowned self] (text: String) -> () in
	self.label.text = "Hi \(text)!"
}

Alt text

Observable:

// you can create signals for Observable<T> properties in case you need to observe/manage
// multiple properties/states

self.word.valueDidChange = { [unowned self] in
    self.label.text = self.word.value
    self.label.textColor = self.getRandomColor()
}

Alt text

License

All this code is released under the MIT license.

About

A small piece of code to enable reactive programming into your project.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages