我有两个viewControllers,vcA和vcB。 当我想从vcB向vcA传输值时,我使用这样的委托:
//vcB.swift
protocol TransferDelegate {
func transferValue(msg: String)
}
var delegate: TransferDelegate!
//vcA.swift
class vcA: UIViewController {
}
extension vcA: TransferDelegate {
func transferValue(msg: String){
//xxxxxxx
}
}
当vcA推送vcB,然后vcb.delegate = self
当vcB想要传输值时,请delegate.transferValue(msg)
我的问题是如果我将vcA的实例self转移到vcB而不是像这样设置委托:
//vcB.swift
class vcB: UIViewController {
var vca: vcA!
func transferValues(msg: String) {
vca.msg = msg
}
}
//vcA.swift
vcb.vca = self
我尝试了两种方法,它们都可以工作。
那么为什么我们使用第一种方法而不是第二种方法呢?
当时之间的区别是什么?代表的优势是什么?
答案 0 :(得分:1)
使用委托的好处是vcB
不具备(或需要)任何充当委托的特定对象类型的知识。而这反过来使vcB
使用vcA
更加简单,而不仅仅是UITableView
。它使您的课程更少耦合,更灵活。
想象一下callto:
只能使用特定类型的数据源和委托,而不是允许任何符合正确协议的内容充当数据源和委托。这没什么不同。
答案 1 :(得分:0)
protocol TransferDelegate {
func transferValue(msg: String)
}
好处是您可以在其他vcs中重用此委托方法。
现在,你有vcA
和vcB
来做事。也许将来你需要在其他vcs中使用类似的东西。
答案 2 :(得分:0)
查看您何时使用委托,您只能访问该特定viewController
的特定方法。但是如果将整个实例保存在vc2中,则可以访问或更改该类的任何属性或功能。您可能不希望允许vc2访问。