目标-动作机制

一对象发给另一对象的消息(动作),以此响应用户事件。

例如现有light,switch对象,通过查看switch状态来控制light开关。

 1 首先我们来了解两个虚拟的组件,开关和灯
 2 灯的声明文件
 3 @interface Light : NSObject
 4 
 5 -(void)turnOff; // 开灯
 6 -(void)turnOn; // 关灯
 7 
 8 @end
 9 可见灯的操作很简单,只有开灯和关灯两个方法。
10 开关的声明文件
11 typedef enum : NSUInteger {
12     SwitchStateOff, // default
13     SwitchStateOn,
14 } SwitchState;
15 
16 @interface Switch : NSObject
17 
18 @property(nonatomic,assign,readonly)SwitchState currentState;
19 
20 -(void)addChangeStateTarget:(id)target Action:(SEL)action;
21 
22 @end
23 开关有一个只读属性,为当前开关的状态,其状态变量为枚举类型
24 •    SwitchStateOff 表示关闭状态
25 •    SwitchStateOn 表示开启状态
26 开关还有一个addChangeStateTarget方法,通过该方法为这个开关设置反馈对象和反馈动作,以实现让反馈对象收到开关状态的改变信息。
27 下面我们假设有一个房间,房间中有一个开关和一个灯。代码实现如下:
28 @interface Room : NSObject
29 
30 @end
31 
32 @interface Room ()
33 
34 @property(nonatomic,strong) Light * aLight;
35 @property(nonatomic,strong) Switch * aSwitch;
36 
37 -(void)changeState:(Switch *)s;
38 
39 
40 @end
41 
42 @implementation Room
43 
44 - (instancetype)init
45 {
46     self = [super init];
47     if (self) 
48     {
49         self.aLight = [[Light alloc] init];
50         self.aSwitch = [[Switch alloc] init];
51         //设置反馈对象和反馈方法
52         [self.aSwitch addChangeStateTarget:self Action:@selector(changeState:)];
53     }
54     return self;
55 }
56 
57 -(void)changeState:(Switch *)s
58 {
59     if (self.aSwitch.currentState == SwitchStateOff)
60     {
61         [self.light turnOn];
62     }
63     else
64     {
65         [self.light turnOff];
66     }
67 }
68 
69 
70 @end

 

转载于:https://www.cnblogs.com/xiaoerheiwatu/p/5807721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值