There are many Communication patterns
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
- Shortcut to handle actions and events
- Easy to extend
- Correct method suggestion based on generic protocol constraint
- Support iOS, macOS
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)
}
}
button.on.tap {
print("button has been tapped")
}
slider.on.valueChange { value in
print("slider has changed value")
}
textField.on.textChange { text in
print("textField text has changed")
}
textView.on.textChange { text in
print("textView text has changed")
}
searchBar.on.textChange { text in
print("searchBar text has changed")
}
datePicker.on.pick { date in
print("datePicker has changed date")
}
barButtonItem.on.tap {
print("barButtonItem has been tapped")
}
gestureRecognizer.on.occur {
print("gesture just occured")
}
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
}
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.
Khoa Pham, [email protected]
We would love you to contribute to EasyClosure, check the CONTRIBUTING file for more info.
EasyClosure is available under the MIT license. See the LICENSE file for more info.