Swift. Как передать данные между двумя ViewControllers, используя prepare(for segue)?

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Имеется два VC, в первом есть свойство, которое не установлено до тех пор, пока пользователь не нажмет кнопку. Соответственно в методе prepare (for segue) осуществляю передачу этого свойства в VC2. НО, я так понимаю что метод prepare(for segue) вызывается где то до загрузки VC1 и, в VC2 тем самым, передается не установленное свойство (nil).

Думаю, время вызова prepare (for segue) изменить нельзя, но как подготовить переезд в этом случае? Когда данные меняются после того как сработал prepare (for segue). Для примера пара VCs:

// Первый контроллер
VC1: UIViewController {
var text: String?

@IBAction func saveButton() { // Нажали на кнопку
text = "Name"}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Segue" {
if let vc = segue.destination as? VC2 {
vc.text = text} }}}

// Второй контроллер
VC2: UIViewController {
var text: String? { didSet{ print(text)}}}
```
Всегда распечатывается nil..

Ответы

▲ 0

В методе prepare(for:sender:) уже есть экземпляр контроллера, на который осуществляется переход. Вы можете проверить это и установить его свойства:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Example", let controller = segue.destination as? YourViewController
            controller.yourProperty = self.yourProperty
        }
    }