Objective C如何实现GKState的isValidNextState

How to implement GKState's isValidNextState in Objective C

似乎 GameplayKit 的所有示例总是在 Swift 中。我决定暂时不转移到 swift,我只是将大量代码翻译成 Objective C,大部分时间都很好。

我正在尝试从 GKState class 中实现 isValidNextState 方法,但我收到 switch 语句的错误,我不确定它是什么想要...在 Swift 中似乎没问题,但在 obj C 中却不行。我得到的错误是:

错误:Statement requires expression of integer type('__unsafe_unretained Class _Nonnull' invalid

我应该在 switch 语句中包含什么而不是 stateclass

-(BOOL) isValidNextState:(Class)stateClass {
    switch (stateClass) { //ERROR ON THIS LINE
        case [InvulnerableState class]: //not sure what this should be either
            return YES;
            break;
        default:
            break;
    }
    return NO;
}

这是 Swift 中的等价物,效果很好:

override func isValidNextState(stateClass: AnyClass) -> Bool {
    switch stateClass {
    case is InvulnerableState.Type:
        return true

    default:
        return false
    }
}

您的 isValidNextState 方法应该是:

- (BOOL)isValidNextState:(Class)stateClass {
  return stateClass == [InvulnerableState class];
}

如果你有多个下一个有效状态,它应该是,例如:

- (BOOL)isValidNextState:(Class)stateClass {
  return stateClass == [InvulnerableState class] ||
         stateClass == [InvulnerableState2 class];
}