设计思路
- 定义事件类型枚举:为不同的操作事件定义一个枚举类型,方便区分不同的事件。
- 定义处理函数类型:使用
typedef
定义不同事件类型对应的处理函数类型。
- 创建事件处理字典:使用
NSMutableDictionary
来存储不同事件类型及其对应的处理函数。
- 提供注册处理函数的方法:允许开发者为不同事件类型注册相应的处理函数。
- 提供处理事件的方法:当有新的事件发生时,根据事件类型从字典中取出对应的处理函数并执行。
关键代码示例
// 1. 定义事件类型枚举
typedef NS_ENUM(NSUInteger, EventType) {
EventTypeClick,
EventTypeSlide
};
// 2. 定义处理函数类型
typedef void(^EventHandler)(id eventData);
@interface EventProcessor : NSObject
@property (nonatomic, strong) NSMutableDictionary<NSNumber *, EventHandler> *eventHandlerMap;
// 3. 提供注册处理函数的方法
- (void)registerHandler:(EventHandler)handler forEventType:(EventType)eventType;
// 4. 提供处理事件的方法
- (void)processEvent:(EventType)eventType withData:(id)eventData;
@end
@implementation EventProcessor
- (instancetype)init {
self = [super init];
if (self) {
_eventHandlerMap = [NSMutableDictionary dictionary];
}
return self;
}
- (void)registerHandler:(EventHandler)handler forEventType:(EventType)eventType {
self.eventHandlerMap[@(eventType)] = handler;
}
- (void)processEvent:(EventType)eventType withData:(id)eventData {
EventHandler handler = self.eventHandlerMap[@(eventType)];
if (handler) {
handler(eventData);
}
}
@end
使用示例
EventProcessor *processor = [[EventProcessor alloc] init];
// 注册点击事件处理函数
[processor registerHandler:^(id eventData) {
NSLog(@"处理点击事件,数据: %@", eventData);
} forEventType:EventTypeClick];
// 注册滑动事件处理函数
[processor registerHandler:^(id eventData) {
NSLog(@"处理滑动事件,数据: %@", eventData);
} forEventType:EventTypeSlide];
// 模拟处理点击事件
[processor processEvent:EventTypeClick withData:@"点击数据"];
// 模拟处理滑动事件
[processor processEvent:EventTypeSlide withData:@"滑动数据"];