从另一个类 Swift 更新视图控制器的 UI [关闭]

Posted

技术标签:

【中文标题】从另一个类 Swift 更新视图控制器的 UI [关闭]【英文标题】:update UI of view controller from another class Swift [closed] 【发布时间】:2021-10-21 12:23:12 【问题描述】:

我有一个带有progressView、标签和按钮的ViewController。当用户单击ViewController 上的按钮时,任务在task.swift 的后台运行。我想根据task.swift 中的任务进度更新ViewController 中的标签和progressView。

【问题讨论】:

1) 您可以在任务可以访问的地方保留对ViewController 的引用。 2) 您可以使用NSNotification 之类的东西向观察者发送更新。 3)您可以保留在任务/视图控制器之间传递的公共状态对象。其他可能性也是如此。包括您的代码和您尝试过的内容,您可能会为您的问题找到更好的答案。 我还没有尝试过任何东西,因为我不知道如何接近。感谢您的回复,它给了我一个想法。我将使用带有静态变量的结构来跟踪进度。 我不确定带有静态变量的结构如何解决这个问题。 是的,你是对的,没想到。 【参考方案1】:

Swift 通信模式

您有多种方式在 Swift 中的 2 个类之间建立通信:

    方法调用/返回 委托模式 关闭 通知模式 发布者订阅者

尊重 MVC(模型 - 视图 - 控制器)

因为您希望您的模型(此处为 Task)不了解 ViewController 以尊重 MVC,所以您不能仅通过引用应用简单的方法调用。

选对的

但是所有其他方式都是完全有效的。因为 ViewController 和 Task 之间似乎是一对一的关系,所以最简单的解决方案是使用委托或闭包。如果您的班级关系是一对多的,您可以选择通知。 Publishers 将用于响应式编程,如果您喜欢 Combine。

【讨论】:

以上是关于从另一个类 Swift 更新视图控制器的 UI [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从另一个类Swift调用一个类的函数

从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?

Swift:如何从另一个类 X 更新 UILabel:UIButton

从另一个类和线程更新 UI 项

从另一个 Activity 类执行 Fragment 中的 AsyncTask 并更新其中的 UI

从另一个类 Swift 访问 navigationItem.title