Это неэффективный способ сделать это, так как вы передаете данные через 3 разных объекта.Однако, продолжая эту методологию, проблема в том, что ярлыки еще не созданы внутри
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let VC = segue.destination as? ThirdViewController {
VC.player1ScoreLabel.text = String(player1CurrentScore)
VC.player2ScoreLabel.text = String(player2CurrentScore)
VC.player3ScoreLabel.text = String(player3CurrentScore)
VC.player4ScoreLabel.text = String(player4CurrentScore)
}
}
Смотрите, ярлык еще не создан.Итак, вы устанавливаете text
на UILabel
, который не инициализирован.Поэтому вам нужно создать переменные для меток внутри ThirdViewController
.
Контроллер третьего вида
class ThirdViewController: UIViewController {
@IBOutlet var player1ScoreLabel: UILabel!
@IBOutlet var player2ScoreLabel: UILabel!
@IBOutlet var player3ScoreLabel: UILabel!
@IBOutlet var player4ScoreLabel: UILabel!
var score0:Int!
var score1:Int!
var score2:Int!
var score3:Int!
override func viewDidLoad() {
super.viewDidLoad()
self.player1ScoreLabel.text = String(score0)
self.player2ScoreLabel.text = String(score1)
self.player3ScoreLabel.text = String(score2)
self.player4ScoreLabel.text = String(score3)
}
}
и изменить последовательность в SecondViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let VC = segue.destination as? ThirdViewController {
VC.score0 = player1CurrentScore
VC.score1 = player2CurrentScore
VC.score2 = player3CurrentScore
VC.score3 = player4CurrentScore
}
}
Другой способ:
Давайте создадим синглтон с именем Game
.В рамках этого (при условии, что у вас только 4 игрока) мы можем создать 4 игроков, которые никогда не изменятся .Это позволяет нам создавать экземпляры игроков в одном месте и вызывать их по мере необходимости.
ПРИМЕЧАНИЕ: Синглтон может быть использован неправильно ЛЕГКО.
https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift https://cocoacasts.com/are-singletons-bad/
class Game {
static var score0:Int = 0
static var score1:Int = 0
static var score2:Int = 0
static var score2:Int = 0
}
Затем в любом месте вашего кода вы можете получить доступ к Game.score0, Game.score1.
ВНИМАНИЕ:
Я бы предостерег вас от очень осторожного использования синглетонов.Вы не хотите все с публичным доступом.Вы должны определить, хорошо это для вас или нет.Приветствия.