Ios 如何在状态机的多个状态中使用相同的变量?
我正在使用Ios 如何在状态机的多个状态中使用相同的变量?,ios,swift,state-machine,gameplay-kit,Ios,Swift,State Machine,Gameplay Kit,我正在使用Gameplaykit的GKStateMachine为我的游戏创建状态机,但我遇到了一个问题,我需要在多个状态中使用相同的变量。如果我用init发送它们,那么变量将独立于原始变量,老实说,我觉得这有点奇怪,因为我假设引用变量总是将其新值引用回原始变量。但我想这与我将值存储到一个新的变量中这一事实有关 class MyStateMachine: GKStateMachine { override init(states: [GKState]) { super.in
Gameplaykit
的GKStateMachine
为我的游戏创建状态机
,但我遇到了一个问题,我需要在多个状态
中使用相同的变量
。如果我用init
发送它们,那么变量
将独立于原始变量
,老实说,我觉得这有点奇怪,因为我假设引用变量
总是将其新值引用回原始变量
。但我想这与我将值存储到一个新的变量中这一事实有关
class MyStateMachine: GKStateMachine {
override init(states: [GKState]) {
super.init(states: states)
}
}
class MyState: GKState {
var test: String
init(test: String) {
self.test = test
}
override func didEnter(from previousState: GKState?) {
self.test = "State Value"
}
}
var test = "Original Value"
var state = MyState(test: test)
var machine = MyStateMachine(states: [state])
machine.enter(MyState.self)
print(test) //Prints Original Value. Variable change in state does not reference back to original variable
print(state.test) //Prints State Value. State variable works independently of original value
无论如何,如何在多个状态类中使用相同的值,并始终保留更新的值?也就是说,如果我在state1中更改变量的值,则该值需要在state2中反映出来,依此类推
首先,我考虑将它们存储在状态机本身中。但在每个州内创建状态机的实例将创建循环依赖。另外,一个新实例将意味着状态机
变量
的值没有保留。于是,我想到了Singeltons
。然后该值将保留在整个应用程序中,这样就可以工作了。但这意味着我可能需要创建大约三个不同的singelton
。也许这很好,但我经常听到人们抱怨这种模式的危险
我对状态机模式不太熟悉,所以可能有一个简单的内置解决方案我根本不知道。状态有一个对包含它的状态机的引用,所以不同的状态引用机器维护的值会有什么困难?很好,正是我想要的!我如何从各州内部控制状态机?