2016-12-28 1 views
0

Es scheint, dass alle Beispiele für GameplayKit immer in Swift sind. Ich habe mich dafür entschieden, im Moment nicht zu swift zu wechseln, und ich habe gerade viel Code in Objective C übersetzt, was die meiste Zeit in Ordnung ist.Wie man GVStates isValidNextState in Objective C implementiert

Ich versuche die isValidNextState Methode aus der GKState Klasse zu implementieren, aber ich bekomme einen Fehler für die switch-Anweisung und ich bin mir nicht sicher, was es will ... es scheint in Swift das ist in Ordnung, aber nicht in obj C. der Fehler, ich bin immer ist:

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

Was stateclass in der switch-Anweisung sollte ich statt haben?

-(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; 
} 

Hier ist das Äquivalent in Swift, der gut arbeitet:

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

    default: 
     return false 
    } 
} 

Antwort

2

Ihre isValidNextState Methode sein sollte:

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

Und wenn Sie mehrere nächste gültige Zustände haben, sollte es sein, Beispiel:

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

Es ist auch erwähnenswert, dass man in Objective-C nur ganzzahlige Typen einschalten kann, d. H. Eine "Ganzzahl". –

Verwandte Themen