Objective c 处理顺序和异步事件的状态机

Objective c 处理顺序和异步事件的状态机,objective-c,enums,state,state-machine,Objective C,Enums,State,State Machine,我创建了这个状态机来处理事件。首先,我不确定我的实现,,因为我不使用转换表或类似的东西,而是简单地输入下一个需要发生的事件/状态。我认为这比在处理事件a的方法中调用方法来处理事件b更干净,对吗 其次,因为有些方法有参数-这不是swift中枚举成员可以有关联值的地方,所以我通过withObj参数为其添加了一个参数。我不认为这有什么问题,但我想知道,从你的角度来看,这是否混淆/违反了某些东西 我还发现这对异步任务非常有用,因此在任务完成后,我将结果值设置为一个局部变量,然后使用该存储值和许多其他现有

我创建了这个
状态机来处理事件。首先,我不确定我的实现,因为我不使用转换表或类似的东西,而是简单地输入下一个需要发生的事件/状态。我认为这比在处理
事件a
的方法中调用方法来处理
事件b
更干净,对吗

其次,因为有些方法有参数-这不是
swift
中枚举成员可以有关联值的地方,所以我通过
withObj
参数为其添加了一个参数。我不认为这有什么问题,但我想知道,从你的角度来看,这是否混淆/违反了某些东西

我还发现这对异步任务非常有用,因此在任务完成后,我将结果值设置为一个局部变量,然后使用该存储值和许多其他现有值将状态更新为
packData
。这个值打包在一个字节数组中,不能在块中使用,所以这是一个有用的解决方法——尽管我还没有测试过

通过
enum
定义状态,如下所示:

typedef NS_ENUM(NSUInteger, ExampleState) {
    ExampleStateIdle,
    ExampleStateWaitingForAsyncTask,
    ExampleStateReadyToPack,
    ExampleStateRespond,
    ExampleStateSomethingInProgress,
    ExampleStateSomething2InProgress,
    ExampleStateComplete
};
在这里,我定义了一个使用helper方法处理每个事件的方法对于可能具有关联值的任何状态,我还有一个额外的参数

- (void)updateState:(ExampleState)state withObj:(id)obj  {

    self.currentState = state;

    switch (state) {
        case ExampleStateWaitingForAsyncTask:
            [self getAsyncInfo];
            break;
        case ExampleStateReadyToPack:
            [self packData];
            break;
        case ExampleStateRespond:
            [self respond:obj];
            break;
        case ExampleStateComplete:
            [self showPopup];
            break;
        default:
            break;
    }
}
用法示例:

-(void)packData {
    NSData *data = [NSData dataWithBytes:&result length:resultIndex];
    // next step is to respond to `client`/`central` with data
    [self updateState:ExampleStateRespond withObj:data];
}

问题是什么?@Willeke这是一个干净而正确的状态机实现吗?虽然我的用例很简单,但其他实现更复杂、更抽象。看到问题了吗?@Willeke这是一个干净、正确的状态机实现吗?虽然我的用例非常简单,但其他实现更复杂和抽象