iOS target-action模式
2016-03-03 14:43
441 查看
swift:
import UIKit
protocol TargetAction {
func performAction();
}
struct TargetActionWrapper<T: AnyObject>: TargetAction {
weak var target: T?;
let action: (T) -> () -> ()
func performAction() {
if let t = target
{
action(t)();
}
}
}
enum ControlEvent {
case TouchUpInside
case ValueChanged
}
class Control {
var actions = [ControlEvent: TargetAction]();
func setTarget<T: AnyObject>(target: T,action: (T) -> () -> (),controlEvent: ControlEvent) {
actions[controlEvent] = TargetActionWrapper(target: target, action: action);
}
func removeTargetForControlEvent(controlEvent: ControlEvent) {
actions[controlEvent] = nil;
}
func performActionForControlEvent(controlEvent: ControlEvent) {
actions[controlEvent]?.performAction();
}
}
oc:
if([_target respondsToSelector:_action])
{
IMP imp = [_target methodForSelector:_action];
void (*func)(id,SEL) = (void *)imp;
func(_target,_action);
}
import UIKit
protocol TargetAction {
func performAction();
}
struct TargetActionWrapper<T: AnyObject>: TargetAction {
weak var target: T?;
let action: (T) -> () -> ()
func performAction() {
if let t = target
{
action(t)();
}
}
}
enum ControlEvent {
case TouchUpInside
case ValueChanged
}
class Control {
var actions = [ControlEvent: TargetAction]();
func setTarget<T: AnyObject>(target: T,action: (T) -> () -> (),controlEvent: ControlEvent) {
actions[controlEvent] = TargetActionWrapper(target: target, action: action);
}
func removeTargetForControlEvent(controlEvent: ControlEvent) {
actions[controlEvent] = nil;
}
func performActionForControlEvent(controlEvent: ControlEvent) {
actions[controlEvent]?.performAction();
}
}
oc:
if([_target respondsToSelector:_action])
{
IMP imp = [_target methodForSelector:_action];
void (*func)(id,SEL) = (void *)imp;
func(_target,_action);
}
相关文章推荐
- iOS界面开发优化--创建与布局分离
- iOS开发-基础:NSDictionary使用小结
- iOS开发中如何合理地制造BUG
- iOS硬解H.264:-VideoToolboxDemo源码分析
- 详解iOS多线程GCD的使用
- ios 缺少合规证明
- 【Xamarin挖墙脚系列:开始使用Xamari4.0系列产品开发IOS】
- iOS开发--自动布局
- iOS 内存管理(一):基本概念与原理
- Nagios添加访问web页面的用户
- 史上最详细的iOS之事件的传递和响应机制
- iOS-多线程的底层实现
- iOS开发过程中 xcode文件与Finder中文件保持一致 + 支付宝集成出错
- iOS 页面传值总结
- iOS之@selector的函数传递多个参数
- iOS udp socket通信-远程唤醒windows电脑主机
- iOS7之后经过滑动返回导航栏隐藏和显示带来的坑(转载)
- ios获取当前的时间
- ios之TableViewCell重用机制避免重复显示问题
- iOS每日一记-----------之 一个弹框View