一个delegate可以申请两个VC吗
Can a Delegate Apply to Two VCs
我认为我正在以一种不应该起作用的方式使用协议...但它确实起作用了。有人可以告诉我我在做什么吗?
例子
假设我的应用程序具有三个视图控制器:MainView、SecondaryView、EditorView。 EditorView 的按钮应该 运行 在其他视图中编码。我有一个允许我远程触发功能的协议。
这是一件奇怪的事情,我正在做的事情也许我不应该...但它正在工作:MainView 和 SecondaryView 都遵循相同的协议。我不明白为什么会这样,但确实如此。
当我在 MainView 中并加载 EditorView 时,例如单击 "Add",MainView 运行 中的代码可以正常工作。
当我在 SecondaryView 中加载 EditorView 并单击 "Add" 时,SecondaryView 运行 中的代码可以正常工作。
问题
如果没问题,如何确定委托给哪个(主要还是次要)?如果不行,为什么它会起作用?
这不仅不错,而且很棒。您已经发现协议的主要好处之一。
在 EditorView
中,您有一个 delegate
属性(您可能已将其命名为其他名称):
weak var delegate : EditorProtocol?
您在 MainView
和 SecondaryView
中的某处也有一些代码,看起来像:
let editor = EditorView() // or perhaps you get it in prepareForSegue(_:sender:)
editor.delegate = self
这告诉 EditorView
要与哪个对象通信。
然后在 EditorView
中调用如下代码:
delegate?.doSomething()
如果 MainView
创建了这个编辑器,那么 delegate
就是 MainView
。否则,它是 SecondaryView
.
当您将 delegate
(或您命名的任何名称)设置为特定对象时,EditorView
将与之通信。
我认为我正在以一种不应该起作用的方式使用协议...但它确实起作用了。有人可以告诉我我在做什么吗?
例子
假设我的应用程序具有三个视图控制器:MainView、SecondaryView、EditorView。 EditorView 的按钮应该 运行 在其他视图中编码。我有一个允许我远程触发功能的协议。
这是一件奇怪的事情,我正在做的事情也许我不应该...但它正在工作:MainView 和 SecondaryView 都遵循相同的协议。我不明白为什么会这样,但确实如此。
当我在 MainView 中并加载 EditorView 时,例如单击 "Add",MainView 运行 中的代码可以正常工作。
当我在 SecondaryView 中加载 EditorView 并单击 "Add" 时,SecondaryView 运行 中的代码可以正常工作。
问题
如果没问题,如何确定委托给哪个(主要还是次要)?如果不行,为什么它会起作用?
这不仅不错,而且很棒。您已经发现协议的主要好处之一。
在 EditorView
中,您有一个 delegate
属性(您可能已将其命名为其他名称):
weak var delegate : EditorProtocol?
您在 MainView
和 SecondaryView
中的某处也有一些代码,看起来像:
let editor = EditorView() // or perhaps you get it in prepareForSegue(_:sender:)
editor.delegate = self
这告诉 EditorView
要与哪个对象通信。
然后在 EditorView
中调用如下代码:
delegate?.doSomething()
如果 MainView
创建了这个编辑器,那么 delegate
就是 MainView
。否则,它是 SecondaryView
.
当您将 delegate
(或您命名的任何名称)设置为特定对象时,EditorView
将与之通信。