EasyClosure
目录
故事
有许多通信模式
有时候,你只想有一个统一、快捷的方式来做这件事。在任何一个 NSObject
子类上调用 on
,以最快的方式处理你的事件。
特性
- 处理动作和事件的快捷方式
- 易于扩展
- 基于泛型协议约束的正确方法建议
- 支持 iOS、macOS
示例
我们可以使用 UISwitch
来做一个有趣的 good, cheap, fast
的演示。
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)
}
}
目标操作和委托
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")
}
可扩展
扩展 Container
并指定 Host
,以便为您自己的类型添加更多功能。例如:
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 通过 CocoaPods 提供使用。要安装它,请将以下行添加到 Podfile 中:
pod 'EasyClosure'
EasyClosure 也通过 Carthage 提供使用。只需将以下内容写入 Cartfile
github "onmyway133/EasyClosure"
EasyClosure 还可以手动安装。只需下载并将 Sources
文件夹拖动到您的项目中。
作者
Pham Khoa,[邮箱地址加密,需点击查看]
贡献力量
我们非常欢迎您为 EasyClosure 贡献,更多详情请查看 贡献力量 文件。
许可证
EasyClosure 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。