#swift #gameplay-kit
#swift #игровой процесс-комплект
Вопрос:
У меня есть следующий код на моей игровой площадке:
import GameplayKit
class TestClass {
var sm: GKStateMachine
init() {
sm = GKStateMachine(states: [MyState()])
sm.enter(MyState.self)
}
}
class MyState: GKState {
override init() {
super.init()
}
override func didEnter(from previousState: GKState?) {
printStateM()
}
func printStateM() {
if (self.stateMachine == nil) {
print("StateMachine")
} else {
print("No StateMachine")
}
}
}
var t = TestClass()
Вывод «Нет StateMachine».
Интересно, почему свойство StateMachine для MyState равно нулю?
Комментарии:
1. Разве это не должно быть
self.stateMachine != nil
? (или, если вы планируете работать с переменной, вы, вероятноif let stateMachine = self.stateMachine
, хотите или что-то в этом роде)
Ответ №1:
Потому что вы допустили опечатку:
import GameplayKit
class TestClass {
var sm: GKStateMachine
init() {
sm = GKStateMachine(states: [MyState()])
sm.enter(MyState.self)
}
}
class MyState: GKState {
override init() {
super.init()
}
override func didEnter(from previousState: GKState?) {
printStateM()
}
func printStateM() {
if (self.stateMachine != nil) { // ⚠️
print("StateMachine")
} else {
print("No StateMachine")
}
}
}
var t = TestClass()
а еще лучше, вы действительно можете распечатать его:
import GameplayKit
class TestClass {
var sm: GKStateMachine
init() {
sm = GKStateMachine(states: [MyState()])
sm.enter(MyState.self)
}
}
class MyState: GKState {
override init() {
super.init()
}
override func didEnter(from previousState: GKState?) {
printStateM()
}
func printStateM() {
if let stateMachine = self.stateMachine {
print("StateMachine: (stateMachine)")
} else {
print("No StateMachine")
}
}
}
var t = TestClass()
Комментарии:
1. У меня сложилось впечатление, что вопросы об опечатках должны быть закрыты.
2. Да, и я подал свой голос за закрытие. К сожалению, я не могу сделать это в одиночку, для этого нужно еще 4 голоса.