如何将具有委派模式的对象转移到另一个VC?

我有一个包含有关酒吧信息的应用程序。 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)

该类符合我创建的协议-

导入基金会

   protocol barInfoDelegate {
   func chooseBar(barChosen:Bar)
    }

并且我还创建了一个委托的实例-

var chooseBarDelegate:barInfoDelegate?

在detailViewController中,我创建了一个带有可选对象的var-

var infoBar:Bar?

并添加了扩展名-

extension InfoViewController: barInfoDelegate {
    func chooseBar(barChosen: Bar) {
        infoBar = barChosen
    }   
}

我还在infoViewController中将委托设置为self

    listViewController.chooseBarDelegate? = self

应用程序不会崩溃,但信息不会传递。 当我使用打印对象在调试器中检查时,我可以看到“ barSelected”确实包含一个对象,但是infoBar为nil。

我在做什么错了?

谢谢!

hfny718hf 回答:如何将具有委派模式的对象转移到另一个VC?

根本没有理由要委托。摆脱协议,chooseBarDelegate属性和barInfoDelegate上的InfoViewController扩展名。您唯一需要保留的是var infoBar:Bar?的{​​{1}}属性。

然后替换此行:

InfoViewController

具有:

chooseBarDelegate?.chooseBar(barChosen: barSelected)
本文链接:https://www.f2er.com/3135003.html

大家都在问