我认为我正在以一种不应该起作用的方式使用协议(protocol)……但它确实起作用了。有人可以告诉我我在做什么吗?
示例
假设我的应用有三个 View Controller :MainView、SecondaryView、EditorView。 EditorView 具有应在其他 View 中运行代码的按钮。我有一个允许我远程触发功能的协议(protocol)。
这是一件奇怪的事情,我正在做的事情也许我不应该...但它正在工作:MainView 和 SecondaryView 都遵循相同的协议(protocol)。我不明白为什么会这样,但确实如此。
当我在 MainView 中并加载 EditorView 时,例如单击“添加”,MainView 中的代码运行并工作。
当我在 SecondaryView 中加载 EditorView 并单击“添加”时,SecondaryView 中的代码运行并起作用。
问题
如果没问题,它如何确定委托(delegate)给哪个(主要还是次要)?如果不行,为什么它会起作用?
最佳答案
这不仅不错,而且很棒。您已经发现协议(protocol)的主要好处之一。
在 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
将与之通信。
关于ios - 一个delegate可以申请两个VC吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657846/