Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在状态机的多个状态中使用相同的变量?_Ios_Swift_State Machine_Gameplay Kit - Fatal编程技术网

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
。也许这很好,但我经常听到人们抱怨这种模式的危险


我对状态机模式不太熟悉,所以可能有一个简单的内置解决方案我根本不知道。

状态有一个对包含它的状态机的引用,所以不同的状态引用机器维护的值会有什么困难?很好,正是我想要的!我如何从各州内部控制状态机?