Swift - 在不初始化控制器的情况下调用函数

Swift - call function without initializing the controller

我同时被简单和复杂的事情困住了。

我正在使用 Swift 创建一个与 SocketRocket 和 WebSockets 一起工作的应用程序,一旦加载了一个简单的 ViewController (class myVC),在 viewDidLoad() I调用函数,将消息发送到服务器并获取响应。这一切都很好。

我在另一个 class (class dataParsing) 中解析响应,然后想从仍在顶部的 ViewController 调用一个函数并使用函数显示答案: presentData(data)

如果我使用:myVC().presentData(data) 整个 ViewController 重新加载,消息在 viewcontroller 重新初始化时发送,我们进入无限循环...

解决方法是什么?

非常感谢!

为了调用视图控制器的方法(更普遍的是 class/struct 的实例),您需要该实例 - 创建一个新实例,就像您使用 myCV().presentData(data) 创建一个与发起请求的实例无关的新实例。

一种可能的方法是将视图控制器实例传递给您的数据解析 class - 然后只需在该实例上调用目标方法。

更好的方法是将闭包传递给数据解析器,它只需调用 presentData() 方法 - 然后由数据解析器执行闭包。

另一种解决方案可能是使用通知:您定义某个事件,让视图控制器侦听该事件,并让数据解析器在满足正确条件时触发它。

最后一个,也可能是最简单的一个,但我不知道有多少可行 - 取决于视图控制器和数据解析器之间的交互方式。我假设在网络操作结束时,您创建并调用同步执行的数据解析器方法。如果这是正确的,而不是从数据解析器调用视图控制器方法,只需在数据解析器方法之后直接从视图控制器调用它 returns.