Ios 一名代表能否适用于两个VCs
我想我是在用一种不应该起作用的方式使用协议。。。但确实如此。有人能告诉我我正在做的事情是否正常吗 示例 假设我的应用程序有三个视图控制器:MainView、SecondaryView、EditorView。EditorView有一些按钮,可以在其他视图中运行代码。我有一个协议,允许我远程触发函数 这是一件奇怪的事情,我正在做的事情也许我不应该。。。但它正在工作:MainView和SecondaryView都符合相同的协议。我不明白它为什么有效,但它确实有效 当我在MainView中加载EditorView时,例如,单击“添加”,MainView中的代码将运行并工作 当我在SecondaryView中加载EditorView并单击“添加”时,SecondaryView中的代码运行并工作 问题Ios 一名代表能否适用于两个VCs,ios,swift,delegates,protocols,Ios,Swift,Delegates,Protocols,我想我是在用一种不应该起作用的方式使用协议。。。但确实如此。有人能告诉我我正在做的事情是否正常吗 示例 假设我的应用程序有三个视图控制器:MainView、SecondaryView、EditorView。EditorView有一些按钮,可以在其他视图中运行代码。我有一个协议,允许我远程触发函数 这是一件奇怪的事情,我正在做的事情也许我不应该。。。但它正在工作:MainView和SecondaryView都符合相同的协议。我不明白它为什么有效,但它确实有效 当我在MainView中加载Edito
如果这是可以的,那么如何确定委托给哪一个(主要还是次要)?如果它不好,为什么会起作用 这不仅没关系,而且很好。您已经发现了协议的主要好处之一 在
EditorView
中,您有一个delegate
属性(您可能将其命名为其他名称):
在main视图
和secondary视图
中的某个地方也有一些代码,看起来像:
let editor = EditorView() // or perhaps you get it in prepareForSegue(_:sender:)
editor.delegate = self
这将告诉EditorView
要与哪个对象通信
然后在EditorView
中调用如下代码:
delegate?.doSomething()
如果MainView
创建了此编辑器,则delegate
是MainView
。否则,它是一个第二视图
当您将
delegate
(或任何您命名的对象)设置为特定对象时,EditorView
将与之通信。这不是一个好例子,当用户忘记设置委托值时,应用程序必须crash@LokeshDudhat这是一个很好的例子,它实际上回答了这个问题。忘记设置委托不会导致崩溃。当然,该应用程序可能无法按预期工作,但不会崩溃。我忘记了,当我按照指南实现协议时,我确实向prepareForSegue添加了代码(让editorVC=segue.destinationViewController)!!这就是编辑知道授权给谁的方式。很酷。太好了,谢谢。
delegate?.doSomething()