ios - Swift - 在不初始化 Controller 的情况下调用函数

标签 ios xcode swift viewcontroller

我同时被困在一些对我来说既简单又复杂的事情上。

我正在使用 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/

相关文章:

ios - Facebook Swift SDK - 消息对话框

ios - 如何在 Swift 3 中将 Core Data 与 iCloud 同步

xcode - 重复的插件 key : FLTGoogleMapsPlugin

ios - 如何在Xcode 6.3.1中为iPhone 4/5添加模拟器

ios - 如何在 IOS 中使用 STRIPE API 创建 STRIPE 客户?

ios - 启用允许任意加载应用程序传输安全设置在 XCODE 9.2 和 iOS 11.2 中不起作用

ios - self.view 添加 subview ,但让某些 subview 内容不被添加的 subview 覆盖

ios - Swift/IOS 重置 CollectionViewCell 中的 ImageView 缩放

objective-c - 在 numberOfRowsInSection 中调用 TableView BeginUpdates

ios - 在 iOS swift 中音乐结束时播放下一首歌曲