如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量

How can I share variables between multiple interface controllers in a paged-based interface on watchOS

我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。

对于我的用例,我无法强制用户使用其他界面控制器之一(通过启动 segue),因此这些解决方案对我不起作用。我需要能够在任一控制器中更改一些变量,并在任一控制器中访问这些变量。

我试过直接在界面控制器中设置一个变量,目前用这种方式不可见:

InterfaceController2().variable = false

但是,这并没有起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。

我正在考虑某种全局变量情况,或者将首选项存储在 UserDefaults 中,但我觉得必须有更好的方法。

最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法来 pass/retrieve 来自共同父级的值。

Alt:您可以创建一个共享实例来存储您的值,您的控制器可以 update/retrieve 从那里获取值。

最终选择:有点恶心,但你可以使用 NSNotificationCenter。 (a) 在所有控制器中添加观察者,(b) post 值更新时通知。然后 (c) 在通知处理程序中更新控制器中的本地值。

您可以使用单例。创建单例最简单的方法是让你想要在 InterfaceControllers 和 class/static 属性.

之间共享的变量

您可以这样创建它:

class CommonClass {
    static var mySingleton = true
}

然后像这样从您的 InterfaceController 访问它: CommonClass.mySingleton = false.

您在使用单例时应该小心,因为它们可以从您的代码的任何地方访问,所以它们可能被误用为全局变量,这可能有其缺陷。

查看 this 文章了解有关单例的更多详细信息。