Swift:当我在 viewController 之间导航时,playAgainstComputer 变量从 true 更改为 false

问题描述 投票:0回答:1

我正在 Xcode 中开发一个与 swift 相关的 iOS 应用程序,其中我有两个视图控制器:SecondViewController 和 GameViewController。我使用布尔变量 playAgainstComputer 来决定游戏是否应该与计算机或其他玩家对抗。我注意到,当我在 SecondViewController 中将 playAgainstComputer 设置为 true 并导航到 GameViewControler 时,playAgainstComputer 的值会自动更改为 false。

这是我的代码,在用户按下 SecondViewController 中的“或与计算机对战”按钮后,我将 playAgainstComputer 设置为 true:

@IBAction func btnPlayNPC(_ sender: UIButton) {
       playAgainstComputer = true
        print("playAgainstComputer: \(playAgainstComputer)")
        performSegue(withIdentifier: TO_GAME_SCREEN, sender: self)
    }

这是我的 GameViewController 中的代码,我注意到 playAgainstComputer 更改为 false:

 @IBAction func buttonTapped(_ sender: UIButton) {
        
        let index = sender.tag
        if boardArray[index] == "" {
            
            if currentPlayer == 1 {
                boardArray[index] = "X"
                
            } else {
                boardArray[index] = "O"
            }
            
            sender.setTitle(boardArray[index], for: .normal)
            
            switchPlayers()
            
            if currentPlayer == 1 {
                turnSign.text = playerOneName
            } else {
                turnSign.text = playerTwoName
            }
            
            if let winnerMessage = checkForWinner() {
                self.winner = winnerMessage
                myAlertMessage(winnerMessage: winnerMessage)
            } else if !boardArray.contains("") {
                myAlertMessage(winnerMessage: "It's a tie!")
            }
            print("playAgainstComputer: \(playAgainstComputer), currentPlayer: \(currentPlayer)")
            if playAgainstComputer && currentPlayer == 2 {
                print("HERE")
                playAgainstNPC()
                makeComputerMove()
            }
        }
    }

我不知道这部分是否相关,但如果是,那么这是我在快速文件中创建变量的代码:

import Foundation

class GameSettings {
    static let shared = GameSettings()
    var playAgainstComputer = false
}

首先,我仔细检查了在 SecondViewController 和 GameViewController 中使用相同的 GameSettings 实例,以确保 playAgainstComputer 变量在两个视图控制器中以相同的方式设置。 然后,当按下 SecondViewController 中的“或与计算机对战”按钮时,我使用打印语句来跟踪 playAgainstComputer 变量的值。我已经确认按下按钮时 playAgainstComputer 设置为 true,这是所需的行为。 我在 GameViewController 中查找了可能将 playAgainstComputer 的值从 true 更改为 false 的任何代码部分,但我不确定是否找到了任何此类部分。 我还尝试在 GameViewController 中使用 playAgainstComputer 变量,但我注意到从 SecondViewController 导航到 GameViewController 时该值从 true 变为 false。这导致我的电脑播放器无法按预期运行。

ios swift storyboard
1个回答
0
投票

为了获得单一信任源,您可以在每次引用变量时以

GameSettings.shared.playAgainstComputer
的形式访问该变量。

按钮操作将如下所示:

@IBAction func btnPlayNPC(_ sender: UIButton) {
    GameSettings.shared.playAgainstComputer = true
    print("playAgainstComputer: \(GameSettings.shared.playAgainstComputer)")
    performSegue(withIdentifier: TO_GAME_SCREEN, sender: self)
}

玩家移动后您的检查将如下所示:

print("playAgainstComputer: \(GameSettings.shared.playAgainstComputer), currentPlayer: \(currentPlayer)")
if GameSettings.shared.playAgainstComputer && currentPlayer == 2 {
    print("HERE")
    playAgainstNPC()
    makeComputerMove()
}
© www.soinside.com 2019 - 2024. All rights reserved.