MST

星途 面试题库

面试题:Objective-C高阶函数在复杂业务逻辑中的应用

假设你正在开发一个iOS应用,需要对用户的一系列操作记录进行处理,这些操作记录包含不同类型的事件(如点击、滑动等),请使用Objective-C高阶函数的概念,设计一个通用的处理框架,能够根据不同的事件类型,灵活地应用不同的处理逻辑,描述你的设计思路并给出关键代码示例。
14.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义事件类型枚举:为不同的操作事件定义一个枚举类型,方便区分不同的事件。
  2. 定义处理函数类型:使用typedef定义不同事件类型对应的处理函数类型。
  3. 创建事件处理字典:使用NSMutableDictionary来存储不同事件类型及其对应的处理函数。
  4. 提供注册处理函数的方法:允许开发者为不同事件类型注册相应的处理函数。
  5. 提供处理事件的方法:当有新的事件发生时,根据事件类型从字典中取出对应的处理函数并执行。

关键代码示例

// 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:@"滑动数据"];