EasyClosure
Unified communication patterns with easy closure in Swift.
Sometimes, you just want a unified and quick way to do it. Just call on on any NSObject subclasses and handle your events the quickest way
Sometimes, you just want a unified and quick way to do it. Just call on
on any NSObject
subclasses and handle your events the quickest way
Features
- [x] Shortcut to handle actions and events
- [x] Easy to extend
- [x] Correct method suggestion based on generic protocol constraint
- [x] Support iOS, macOS
Example
We can make a fun demo of good, cheap, fast
with UISwitch
func allOn() -> Bool {
return [good, cheap, fast].filter({ $0.isOn }).count == 3
}
good.on.valueChange { _ in
if allOn() {
fast.setOn(false, animated: true)
}
}
cheap.on.valueChange { _ in
if allOn() {
good.setOn(false, animated: true)
}
}
fast.on.valueChange { _ in
if allOn() {
cheap.setOn(false, animated: true)
}
}
Target-Action and Delegate
UIButton
button.on.tap {
print("button has been tapped")
}
UISlider
slider.on.valueChange { value in
print("slider has changed value")
}
UITextField
textField.on.textChange { text in
print("textField text has changed")
}
UITextView
textView.on.textChange { text in
print("textView text has changed")
}
UISearchBar
searchBar.on.textChange { text in
print("searchBar text has changed")
}
UIDatePicker
datePicker.on.pick { date in
print("datePicker has changed date")
}
UIBarButtonItem
barButtonItem.on.tap {
print("barButtonItem has been tapped")
}
UIGestureRecognizer
gestureRecognizer.on.occur {
print("gesture just occured")
}
Extensible
Extend Container
and specify Host
to add more functionalities to your own types. For example
public extension Container where Host: UITableView {
func cellTap(_ action: @escaping (UITableViewCell) -> Void)) {
// Your code here here
}
}
// usage
let tableView = UITableView()
tableView.on.cellTap { cell in
}
Installation
EasyClosure is available through CocoaPods. To install
it, simply add the following line to your Podfile:
pod 'EasyClosure'
EasyClosure is also available through Carthage.
To install just write into your Cartfile:
github "onmyway133/EasyClosure"
EasyClosure can also be installed manually. Just download and drop Sources
folders in your project.
Author
Khoa Pham, [email protected]