0

似乎 GameplayKit 的所有示例总是在 Swift 中。我决定暂时不使用 swift,我刚刚将大量代码翻译成 Objective C,这在大多数情况下都很好。

我正在尝试isValidNextState从类中实现该方法GKState,但是我收到 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
    }
}
4

1 回答 1

2

你的isValidNextState方法应该是:

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

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

- (BOOL)isValidNextState:(Class)stateClass {
  return stateClass == [InvulnerableState class] ||
         stateClass == [InvulnerableState2 class];
}
于 2016-12-28T08:37:52.413 回答