代表可以申请两个VC

时间:2015-09-18 17:31:18

标签: ios swift delegates protocols

我认为我以一种不应该工作的方式使用协议......但确实如此。有人可以告诉我,我做的事情是否合适?

示例

让我们说我的应用程序有三个视图控制器:MainView,SecondaryView,EditorView。 EditorView具有应在其他视图中运行代码的按钮。我有一个协议,允许我远程触发功能。

这是奇怪的事情,我做的事情可能是我不应该......但它正在发挥作用:MainView和SecondaryView都遵循相同的协议。我不明白它为什么会起作用,但确实如此。

当我在MainView中并加载EditorView时,例如,单击"添加",MainView中的代码运行并运行。

当我在SecondaryView中并加载EditorView并单击"添加"时,SecondaryView中的代码将运行并运行。

问题

如果可以的话,如何确定委托给哪个(主要与次要)?如果不行,为什么会有效?

1 个答案:

答案 0 :(得分:2)

这不仅没关系 - 它很棒。您已经发现了协议的主要优点之一。

EditorView中,您有一个delegate属性(您可能已将其命名为其他内容):

weak var delegate : EditorProtocol?

您在MainViewSecondaryView的某个地方也有一些代码如下:

let editor = EditorView() // or perhaps you get it in prepareForSegue(_:sender:)
editor.delegate = self

告诉EditorView与哪个对象进行通信。

然后在EditorView内拨打代码:

delegate?.doSomething()

如果MainView创建了此编辑器,则delegateMainView。否则,它是SecondaryView

当您将delegate(或您命名的任何内容)设置为特定对象时,EditorView将与之通信。