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

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

【问题讨论】:

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

标签: ios swift xcode multithreading


【解决方案1】:

Swift 通信模式

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

  1. 方法调用/返回
  2. 委托模式
  3. 关闭
  4. 通知模式
  5. 发布者订阅者

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

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

选对的

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

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多