使用委托在viewControllers之间传输值有什么好处?

时间:2018-06-08 04:38:37

标签: ios swift delegates

我有两个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

我尝试了两种方法,它们都可以工作。

那么为什么我们使用第一种方法而不是第二种方法呢?

当时之间的区别是什么?代表的优势是什么?

3 个答案:

答案 0 :(得分:1)

使用委托的好处是vcB不具备(或需要)任何充当委托的特定对象类型的知识。而这反过来使vcB使用vcA更加简单,而不仅仅是UITableView。它使您的课程更少耦合,更灵活。

想象一下callto:只能使用特定类型的数据源和委托,而不是允许任何符合正确协议的内容充当数据源和委托。这没什么不同。

答案 1 :(得分:0)

protocol TransferDelegate {
    func transferValue(msg: String)
}

好处是您可以在其他vcs中重用此委托方法。 现在,你有vcAvcB来做事。也许将来你需要在其他vcs中使用类似的东西。

答案 2 :(得分:0)

查看您何时使用委托,您只能访问该特定viewController的特定方法。但是如果将整个实例保存在vc2中,则可以访问或更改该类的任何属性或功能。您可能不希望允许vc2访问。