我坚持做一些简单的事情。对我来说很复杂。
我使用Swift创建一个适用于SocketRocket和WebSockets的应用程序,一旦加载了一个简单的ViewController(class myVC
),在viewDidLoad()
我调用一个函数,发送消息给服务器并获得响应。这一切都很好。
我在另一个类(class dataParsing
)中解析响应,然后想要从仍在顶部的ViewController调用一个函数并使用函数显示答案:presentData(data)
如果我使用:myVC().presentData(data)
整个ViewController重新加载,并且在重新初始化viewcontroller时发送消息,我们进入无限循环......
解决方案是什么?
非常感谢!
答案 0 :(得分:1)
为了调用视图控制器的方法(更一般地说是类/结构的实例),您需要实例 - 像myCV().presentData(data)
一样创建新实例会创建一个新实例与发起请求的人没有任何关系。
一种可能的方法是将视图控制器实例传递给数据解析类 - 然后只需在该实例上调用目标方法。
更好的方法是将闭包传递给数据解析器,该解析器只调用presentData()
方法 - 然后由数据解析器执行闭包。
另一种解决方案可能是使用通知:您定义某个事件,让视图控制器监听该事件,并让数据解析器在满足正确条件时触发它。
最后,可能是最简单的,但我不知道多少可行 - 取决于视图控制器和数据解析器之间的交互方式。我假设在网络操作结束时,您创建并调用数据解析器的方法,该方法是同步执行的。如果这是正确的,而不是从数据解析器调用视图控制器方法,只需在数据解析器方法返回后直接从视图控制器调用它。