2015-07-06 2 views
0

В приведенном ниже примере stateClass: AnyClass действительный экземпляр класса, который, например, я мог бы позвонить, чтобы получить stateClass.name или это просто ссылка на тип класса. Я чувствую, что из строки validChange это просто ссылка на тип класса не фактический экземпляр любого класса, из которого я могу извлечь данные из?Ссылка Swift AnyClass на экземпляр класса или просто введите?

override func isValidNextState(stateClass: AnyClass) -> Bool { 
    let validChange = stateClass is MonsterAttack.Type 
    return validChange 
} 

ответ

1

Это просто ссылка на тип класса, то есть вы могли бы назвать:

isValidNextState(SomeClass.self) 
1

Классы являются ссылочными типами. Поэтому, когда вы передаете stateClass, вы просто передаете указатель на экземпляр stateClass из MonsterAttack. Так stateClass является экземпляром да, но это экземпляр же к тому, что вы перешли в вашу isValidNextState функции

let validChange появляется как раз быть необязательно заливкой аргумента в MonsterAttack типа.

Этот ответ может помочь в дальнейшем: https://stackoverflow.com/a/27366050/4396258

2

AnyClass определяется как следует: typealias AnyClass = AnyObject.Type, которая сама по себе является фактический тип класса. Поэтому, если у вас есть class с именем «Тест», вы должны пройти Test.self, и на него можно вызвать только методы/свойства static/class и инициализаторы. Если вы хотите использовать фактический экземпляр использовать AnyObject (только для классов) или Any (для чего):

override func isValidNextState(stateClass: AnyObject) -> Bool { 
    let validChange = stateClass is MonsterAttack.Type 
    return validChange 
} 
+0

Если вы хотите, чтобы получить доступ к экземпляру этого класса, вы можете сделать 'Statemachine .stateForClass (stateClass!) ' – Sez

+0

@sez Какой тип имеет' stateMachine'? – Qbyte

+0

Это «GKStateMachine». Обратите внимание, что он будет возвращать 'nil', если состояние было сконструировано, но еще не добавлено в конечный автомат. Но поскольку 'isValidNextState' вызывается конечным автоматом, которому принадлежит это состояние, должно быть хорошо вызвать' stateForClass' внутри 'isValidNextState'. – Sez

Смежные вопросы