gpt4 book ai didi

Swift - 如何在菜单栏应用程序中跨窗口共享类(作为单例)?

转载 作者:行者123 更新时间:2023-11-30 10:27:23 24 4
gpt4 key购买 nike

我有一个 NSViewController ,它有一个类变量,如下所示:

class ServerAdminViewController: NSViewController, NSTextFieldDelegate, MyTableViewDelegate {

var myClass = MyClass()

func showAdmin(window: NSWindow, myClass: MyClass) {
self.myClass = myClass
window.makeKeyAndOrderFront(self)
NSApp.activate(ignoringOtherApps: true)
}

该类的实例在 App 初始化时实例化。稍后,当用户单击菜单项时,我想显示一个窗口并将该值用作应用程序的单例,在此窗口打开期间,还可以修改 myClass。但是,声明实例变量的行正在执行多次,并且在 self.myClass = myClass 赋值之后,重置对象(这是一个打开窗口的菜单栏应用程序)。

尝试过有几件事,例如。从myClass中删除无参数构造函数,将该变量声明为私有(private)并带有“!”,向ViewController添加init方法(没有成功)以及其他一些失败的尝试。

问题如何使 myClass 成为单例并在应用程序中共享它(即使其可供此窗口使用)而不重新初始化它?

最佳答案

曾经有很多东西可以用dispatchOnce之类的东西来做到这一点。但现在我这样做的方法是在我的类上声明一个共享静态变量。这不会处理持久性,但它会解决您多次创建类的问题。共享引用只能在释放后使用时重新创建。或者如果以前从未使用过。类变量还可以方便地检索许多 Controller 的类。

class MyClass {

static let shared = MyClass()

}

class MyViewController: UIViewController {

let myClass = MyClass.shared

}

关于Swift - 如何在菜单栏应用程序中跨窗口共享类(作为单例)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59850424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com