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

Swift 如何将具有委托模式的对象转移到另一个VC?,swift,xcode,delegates,Swift,Xcode,Delegates,我有一个包含酒吧信息的应用程序。 listViewController保存单元格中的每个条形图对象(名称、地址、电话等) 当我按下单元格时,我移动到显示数据的infoViewController,但由于某些原因,它无法工作 这是TableView中的代码- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let barSelected = bars[index

我有一个包含酒吧信息的应用程序。 listViewController保存单元格中的每个条形图对象(名称、地址、电话等)

当我按下单元格时,我移动到显示数据的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 infoBar:Bar?
并加上一项延展—

extension InfoViewController: barInfoDelegate {
    func chooseBar(barChosen: Bar) {
        infoBar = barChosen
    }   
}
我还在infoViewController中将委托设置为self

    listViewController.chooseBarDelegate? = self
应用程序不会崩溃,但信息不会传递。 当我;我正在使用print object检查调试器,我可以看到“barSelected”确实包含一个对象,但infoBar是nil

我做错了什么


谢谢大家!

完全没有理由委托。去掉协议、
chooseBarDelegate
属性和
InfoViewController
上的
barinfo委托
扩展。您只需要保留
InfoViewController
var infoBar:Bar?
属性

然后更换该行:

chooseBarDelegate?.chooseBar(barChosen: barSelected)
与:


首先,非常感谢你的回答!这当然有效。我想用delegate来做,因为我还需要将数据从另一个vc(mapVC)传递到同一个infoVC,所以我认为delegate模式会更好,因为我只需要遵守协议。我猜我错了?…当infoVC需要向(或告诉)另一个视图控制器询问某些事情,而您不想硬编码另一个视图控制器将是谁时,infoVC会希望使用委托。但听起来有两种情况,视图控制器创建infoVC,而原始视图控制器需要向infoVC提供数据。这与使用委托时正好相反。
infoVC.infoBar = barSelected