DUKEBlocksKit 一行代码解决属性绑定,模仿ReactiveCocoaDUKE(self.textfield, text) = DUKEObserve(self.message, text); DUKEBlocksKit【前言】
DUKEBlocksKit部分借鉴了著名框架Aspects) , BlocksKit) 与 ReactiveCocoa) 神奇的宏定义
1.动态代理:
- 先简单的介绍一下BlocksKit) 框架的动态代理 在动态代理这部分可以说是 BlocksKit 的精华。它使用 block 属性替换 UIKit中的所有能够通过代理完成的事件,省略了设置代理和实现方法的过程,让对象自己实现代理方法(其实不是对象自己实现的代理方法,开题报告,只是框架为我们提供的便捷方法,不需要构造其它对象就能完成代理方法的实现),而且这个功能的实现是极其动态的。具体可以参照博客 神奇的BlocksKit)
- DUKEBlocksKit)在使用上优于BlocksKit, BlocksKit动态代理步骤比较繁琐:1.获取及注册被代理类的动态代理对象 2.需要将委托对象的代理方法映射一个block对象 3.设置为动态代理 DUKEBlocksKit使用步骤请见后面示例
- DUKEBlocksKit)支持自定义委托方法转block
2.RAC(TARGET, ...) 与 RACObserve(TARGET, KEYPATH)的巧妙结合
- DUKEBlocksKit)模仿了ReactiveCocoa) 支持KVO神奇的宏,论文,例如 RAC宏绑定属性:
3.UIControl事件转block
UIButton *exampleBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [exampleBtn duke_addTouchUpInside:^(id sender) { // TouchUpInside事件回调 }]; DUKEBlocksKit【支持】动态代理(UIKit 中的所有能够通过代理完成的事件与自定义委托)
支持ReactiveCocoa)神奇RAC(TARGET, ...) 与 RACObserve(TARGET, KEYPATH)的巧妙结合的宏
UIControl事件转block
后续还会增加
DUKEBlocksKit【示例】1.动态代理UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@'DUKEBlocksKitExample' delegate:nil cancelButtonTitle:@'取消' destructiveButtonTitle:nil otherButtonTitles:@'Example1',@'Example2',nil]; [sheet duke_mapSelector:@selector(actionSheet:clickedButtonAtIndex:) usingBlock:^(UIActionSheet *actionSheet, NSInteger buttonIndex) { // UIActionSheet 回调事件 }]; [sheet duke_beginDynamicDelegate]; [sheet showInView:self.view]; 2.RAC(TARGET, ...) 与 RACObserve(TARGET, KEYPATH)DUKE(self.textfield, text) = DUKEObserve(self.message, text); 3.UIControl事件转blockUIButton *exampleBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [exampleBtn duke_addTouchUpInside:^(id sender) { // TouchUpInside事件回调 }]; DUKEBlocksKit【安装】From CocoaPods【使用CocoaPods】pod 'DUKEBlocksKit' DUKEBlocksKit【期待】如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有)
如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢
如果你想为DUKEBlocksKit输出代码,请拼命Pull Requests我
感谢你的支持是我无限的动力
如果喜欢请star一下,感谢你的支持!github地址:https://github.com/xiezhongmin/DUKEBlocksKit