Swift 来自另一个类的访问变量

Swift 来自另一个类的访问变量,swift,file,variables,Swift,File,Variables,我试图用最新版本的Swift为我在Xcode中创建的应用程序创建不同的主题。所以基本上我想让它工作的方式是 在用户在一个特殊的“主题”页面中按下一个主题后,将有一个变量(我们称之为变量“主题”)发生变化 根据变量的值,其他页面将更改其颜色、样式等 我之所以问这个问题是因为我不确定其他视图控制器如何访问变量“theme”及其当前值。每个视图控制器类位于单独的文件中 我读了一些类似问题的其他答案,但它们似乎不起作用。任何帮助都将不胜感激与您分享 选项1单身人士 class Service { s

我试图用最新版本的Swift为我在Xcode中创建的应用程序创建不同的主题。所以基本上我想让它工作的方式是

  • 在用户在一个特殊的“主题”页面中按下一个主题后,将有一个变量(我们称之为变量“主题”)发生变化
  • 根据变量的值,其他页面将更改其颜色、样式等
  • 我之所以问这个问题是因为我不确定其他视图控制器如何访问变量“theme”及其当前值。每个视图控制器类位于单独的文件中

    我读了一些类似问题的其他答案,但它们似乎不起作用。任何帮助都将不胜感激

    与您分享

    选项1单身人士

    class Service {
      static let shared = Service()
      var theme:Theme = .black
    }
    
    选项2全局风险值

    var theme:Theme = .black
    


    关于刷新,每个vc都应该配置为在最坏的情况下使用此变量,在
    视图中出现

    有很多解决方案:

    • 一个单例类,然后调用所有 视图控制器
    • 如果您有视图控制器的工厂,您可以使用依赖项注入来传递它(这是一个先进的概念)
    • 将主题存储在AppDelegate中。AppDelegate是一个单例,您可以从任何地方获得它的引用
    • 将主题作为字典存储在NSUserDefaults中,然后在视图控制器中读取
    另一件事是如何刷新已在导航控制器上推送的当前视图/视图控制器。Inside ViewDidDisplay是第一种方法,但在某些情况下,您需要使用通知中心向视图控制器/视图的所有活动实例发送通知以进行刷新。这里有一个很好的例子,它使用了一个协议


    最好的选择是用户默认值,因为如果应用程序被终止或崩溃,上述选项将丢失存储的数据。
    enum Theme { case black,white }