Да, вы правы, если у вас есть переход от VC1 (GameViewController
) к VC2 (SomeTableViewController
), а затем от VC2 к VC1, это не тот же экземпляр VC1.
Если вы не используете UINavigationController
, вы можете просто "перейти" из VC2 обратно в VC1, отклонив VC2 с помощью
dismiss(animated: true)
Но как теперь вы можете передать данные обратноваш предыдущий контроллер?Начните с этого: в VC2 создайте переменную замыкания, которая принимает параметр типа Player
.Затем, прежде чем вы отклоните VC2, вызовите это закрытие
class SomeTableViewController: UITableViewController {
var callback: ( (Player) -> Void )?
func playerSelected(_ player: Player) {
callback?(player)
dismiss(animated: true)
}
}
Но произойдет ли после вызова callback
?Ничего, вы должны определить, что произойдет до того, как вы представите VC2.Таким образом, вы можете переопределить prepare(for:sender:)
внутри VC1 и назначить целевую переменную закрытия callback
(когда будет вызываться callback
, вам нужно изменить item2
) VC1
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueToTableViewController" {
let tableViewController = segue.destination as! SomeTableViewController
tableViewController.callback = { player in
self.item2 = player
}
}
}