您的位置:首页 > 移动开发 > IOS开发

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);

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: