Swift - 调用函数而不初始化控制器

时间:2015-02-23 22:40:59

标签: ios xcode swift viewcontroller

我坚持做一些简单的事情。对我来说很复杂。

我使用Swift创建一个适用于SocketRocket和WebSockets的应用程序,一旦加载了一个简单的ViewController(class myVC),在viewDidLoad()我调用一个函数,发送消息给服务器并获得响应。这一切都很好。

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

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

解决方案是什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

为了调用视图控制器的方法(更一般地说是类/结构的实例),您需要实例 - 像myCV().presentData(data)一样创建新实例会创建一个新实例与发起请求的人没有任何关系。

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

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

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

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