Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 一名代表能否适用于两个VCs_Ios_Swift_Delegates_Protocols - Fatal编程技术网

Ios 一名代表能否适用于两个VCs

Ios 一名代表能否适用于两个VCs,ios,swift,delegates,protocols,Ios,Swift,Delegates,Protocols,我想我是在用一种不应该起作用的方式使用协议。。。但确实如此。有人能告诉我我正在做的事情是否正常吗 示例 假设我的应用程序有三个视图控制器:MainView、SecondaryView、EditorView。EditorView有一些按钮,可以在其他视图中运行代码。我有一个协议,允许我远程触发函数 这是一件奇怪的事情,我正在做的事情也许我不应该。。。但它正在工作:MainView和SecondaryView都符合相同的协议。我不明白它为什么有效,但它确实有效 当我在MainView中加载Edito

我想我是在用一种不应该起作用的方式使用协议。。。但确实如此。有人能告诉我我正在做的事情是否正常吗

示例

假设我的应用程序有三个视图控制器:MainView、SecondaryView、EditorView。EditorView有一些按钮,可以在其他视图中运行代码。我有一个协议,允许我远程触发函数

这是一件奇怪的事情,我正在做的事情也许我不应该。。。但它正在工作:MainView和SecondaryView都符合相同的协议。我不明白它为什么有效,但它确实有效

当我在MainView中加载EditorView时,例如,单击“添加”,MainView中的代码将运行并工作

当我在SecondaryView中加载EditorView并单击“添加”时,SecondaryView中的代码运行并工作

问题


如果这是可以的,那么如何确定委托给哪一个(主要还是次要)?如果它不好,为什么会起作用

这不仅没关系,而且很好。您已经发现了协议的主要好处之一

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()