我同时被困在一些对我来说既简单又复杂的事情上。
我正在使用 Swift 创建一个与 SocketRocket 和 WebSockets 配合使用的应用程序,一旦加载了一个简单的 ViewController (class myVC
),就在我调用的 viewDidLoad()
中一个函数,将消息发送到服务器并获得响应。所有这一切都很好。
我解析另一个类(class dataParsing
)中的响应,然后想要从仍在顶部的 ViewController 调用一个函数,并使用函数显示答案:presentData(data )
如果我使用: myVC().presentData(data)
整个 ViewController 会重新加载,并在 viewcontroller 重新初始化时发送消息,我们会陷入无限循环......
解决办法是什么?
非常感谢!
最佳答案
为了调用 View Controller 的方法(以及更一般的类/结构实例的方法),您需要实例 - 像使用 myCV().presentData(data) 一样创建一个新实例
创建一个与发起请求的实例无关的新实例。
一种可能的方法是将 View Controller 实例传递给您的数据解析类——然后简单地调用该实例上的目标方法。
更好的方法是将闭包传递给数据解析器,它只需调用 presentData()
方法 - 然后由数据解析器执行闭包。
另一种解决方案可能是使用通知:您定义一个特定的事件,让 View Controller 监听该事件,并让数据解析器在满足正确条件时触发它。
最后一个,也可能是最简单的一个,但我不知道有多少可行 - 取决于 View Controller 和数据解析器之间的交互方式。我假设在网络操作结束时,您创建并调用同步执行的数据解析器方法。如果这是正确的,而不是从数据解析器调用 View Controller 方法,只需在数据解析器方法返回后直接从 View Controller 调用它。
关于ios - Swift - 在不初始化 Controller 的情况下调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684951/