Как перенести объект с шаблоном делегирования в другой ВК? - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть приложение, которое содержит информацию о барах. listViewController содержит каждый объект Bar в ячейке (имя, адрес, телефон и т. д.).

Когда я нажимаю на ячейку, я перехожу к infoViewController, который отображает данные, но по какой-то причине он не работает

это код в TableView -

    func tableView(_ tableView: UITableView, didSelectRowAt 
    indexPath: IndexPath) {
    let barSelected = bars[indexPath.row]

      let infoVC = storyboard?.instantiateViewController(withIdentifier: "infoViewController") as! InfoViewController

    chooseBarDelegate?.chooseBar(barChosen: barSelected)
    present(infoVC, animated: true, completion: nil)

класс соответствует созданному мною протоколу -

import Foundation

   protocol barInfoDelegate {
   func chooseBar(barChosen:Bar)
    }

и ятакже создал экземпляр делегата -

var chooseBarDelegate:barInfoDelegate?

в detailViewController. Я создал переменную var с необязательным объектом -

var infoBar:Bar?

и добавил расширение -

extension InfoViewController: barInfoDelegate {
    func chooseBar(barChosen: Bar) {
        infoBar = barChosen
    }   
}
* 1021. * Я также установил делегата на себя в infoViewController
    listViewController.chooseBarDelegate? = self

Приложение не падает, но информация не передается. Когда я проверяю отладчик с помощью объекта печати, я вижу, что «barSelected» содержит объект, но infoBar равен nil.

Что я делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2019

Нет никаких причин для делегата вообще. Избавьтесь от протокола, свойства chooseBarDelegate и расширения barInfoDelegate в InfoViewController. Единственное, что вам нужно сохранить, это свойство var infoBar:Bar? InfoViewController.

Затем замените эту строку:

chooseBarDelegate?.chooseBar(barChosen: barSelected)

на:

infoVC.infoBar = barSelected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...