【问题标题】:Accessing a Running Instance of a Class Swift访问 Swift 类的正在运行的实例
【发布时间】:2021-07-29 18:40:26
【问题描述】:

我在文件 A 中有类 A,在文件 B 中有类 B。在类 B 中,我想访问类 A 的运行实例,以便运行位于其中的函数。这两个类都连接到视图控制器。我不想像classAInstance = classA() 那样创建类 A 的新实例,而是访问我的应用程序已经在运行的类 A 的实例。任何帮助将不胜感激。

这是我在 A 类中的部分代码:

Class A {
    func reloadTableView() {
        self.CardsTableView.reloadData()
    }
}

这是我在 B 类中的部分代码:

Class B {
    @IBAction func saveButton(_ sender: UIButton) {
        // here is where I want to call reloadTableView() from class A
    }
}

【问题讨论】:

标签: ios swift xcode swiftui


【解决方案1】:

我可能使用的快速而肮脏的方法是你有一些单例,你可以在其中存储你的类的当前实例。

例子:

class EnvironmentUtility {
    
    private static var instance: EnvironmentUtility?
    
    internal class func shared() -> EnvironmentUtility {
        guard let currentInstance = instance else {
            instance = EnvironmentUtility()
            return instance!
        }
        return currentInstance
    }

    var myClassA: ClassA? = nil
    var myClassB: ClassB? = nil
}

然后在那些 ViewControllers/Classes 的 viewDidLoad(或者你喜欢的其他地方)中:

class ClassA: UIViewController {
    …
    override func viewDidLoad()  {
    …
       EnvironmentUtility.shared().myClassA = self 
    }
    …
}

稍后在 ClassB 中,您可以:

class ClassB: UIViewController {
    …
    @IBAction func saveButton(_ sender: UIButton)  {
       EnvironmentUtility.shared().myClassA.reloadTable()
    }
    …
 }

这不是最漂亮或最快捷的方式,但又快又脏。

如果您想编写更好的解决方案,我建议您查看 MVVM-C Swift 架构模式(我自己使用这种模式)。在此架构中,您将可以访问海外 viewController 转换的 Coordinator,并且您还可以以更优雅的方式跟踪 ViewControllers/Classes 的当前实例。

这是 MVVM-C 的速成课程:https://marcosantadev.com/mvvmc-with-swift/

【讨论】:

  • 完美运行,谢谢!
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多