从另一个类访问变量Swift

3
我正在尝试为我在Xcode中创建的应用程序创建不同的主题,使用最新版本的Swift。所以基本上我的想法是:
  1. 用户在特殊的“主题”页面选择主题后,会有一个变量(让我们简单地称之为“主题”变量)发生改变
  2. 根据变量的值,其他页面将改变它们的颜色、样式等
我之所以提出这个问题,是因为我不确定其他视图控制器如何访问变量“theme”及其当前值。每个视图控制器类位于单独的文件中。
我阅读了一些其他类似问题的答案,但它们似乎并不起作用。任何帮助都将不胜感激。
2个回答

4

分享它

选项1 单例模式

class Service {
  static let shared = Service()
  var theme:Theme = .black
}

选项2 全局变量
var theme:Theme = .black

并且

enum Theme { case black,white }

关于刷新,每个视图控制器都应该在最坏的情况下配置使用此变量,在viewDidAppear内部。


2
最好的选择是UserDefaults,因为以上选项会在您的应用程序被终止或崩溃时丢失您存储的数据。 - Keshu R.

2
有很多解决方案:
  • 一个单例类,然后在所有的视图控制器中调用共享实例
  • 如果您为视图控制器创建了工厂,您可以使用依赖注入传递它(这是一种高级概念)
  • 将主题存储在AppDelegate中。AppDelegate是一个单例,您可以从任何地方获得它的引用
  • 将主题作为字典存储在NSUserDefaults中,在您的视图控制器中读取它
  • ...
另一件事是如何刷新已经推送到导航控制器上的当前视图/视图控制器。在viewDidAppear中是第一种方法,但在某些情况下,您需要使用通知中心向所有活动的视图控制器/视图发送通知以进行刷新。在这里,您可以使用协议来实现这个目的。
参考链接:https://academy.realm.io/posts/architecting-a-robust-color-system-swift-tryswift-2017-ragone/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接