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