Swift - Как разделить класс (как синглтон) по windows в приложении menubar? - PullRequest
0 голосов
/ 22 января 2020

У меня есть 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)
    }

Экземпляр этого класса создается в инициализации приложения. Позже, когда пользователь нажимает на элемент меню, я хочу показать окно и использовать это значение в качестве одиночного для приложения, в то время как это окно открыто, также имея возможность изменять myClass. Однако строка, в которой объявлена ​​переменная экземпляра, выполняется несколько раз и после назначения self.myClass = myClass сбрасывает объект (это приложение меню, которое открывает окно).

Tried Несколько вещей, напр. удаление конструктора без параметров из myClass, объявление этой переменной закрытой и с "!", добавление методов инициализации к ViewController (без успеха) и некоторых других неудачных попыток.

Вопрос Как сделать myClass синглтоном и поделиться им в приложении (т.е. сделать его доступным для этого окна) без его повторной инициализации?

1 Ответ

0 голосов
/ 22 января 2020

Так что раньше было много вещей, чтобы сделать это с dispatchOnce и тому подобными вещами. Но теперь я делаю это, объявляя общую переменную stati c в моем классе. Это не справится с постоянством, но решит вашу проблему, создавая ваш класс много раз. Общая ссылка воссоздается только после использования. Или, если он никогда не использовался раньше. Переменная класса также удобна для извлечения класса для многих контроллеров.

class MyClass {

    static let shared = MyClass()

}

class MyViewController: UIViewController {

    let myClass = MyClass.shared

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...