我正在尝试使用最新版本的 Swift 为我在 Xcode 中创建的应用程序创建不同的主题。所以基本上我的想法是让它工作
用户在特殊的"主题- "页面中按下主题后,将有一个变量(我们只称变量为"主题"(发生了变化
- 根据变量的值,其他页面将更改其颜色、样式等。
我之所以问这个问题,是因为我不确定其他视图控制器如何访问变量"theme"及其当前值。每个视图控制器类都位于单独的文件中。
我读了一些类似问题的其他答案,但它们似乎不起作用。任何帮助将不胜感激
分享给
选项 1 单例
class Service {
static let shared = Service()
var theme:Theme = .black
}
选项 2 全局变量
var theme:Theme = .black
和
enum Theme { case black,white }
关于刷新,每个VC都应配置为在最坏的情况下使用此变量viewDidAppear
有很多解决方案:
- 一个单例类,然后您在所有 视图控制器
- 如果你的视图控制器有工厂,你可以使用依赖注入来传递它(这在某种程度上是高级概念(
- 将主题存储在应用程序委托中。AppDelegate 是一个单例,您可以从任何地方获得它的引用
- 将主题存储为 NSUserDefaults 中的字典,在视图控制器中读取它
- 。
另一件事是如何刷新已在导航控制器上推送的当前视图/视图控制器。Inside viewDidAppear 是第一种方法,但在某些情况下,您需要使用通知中心向视图控制器/视图的所有实时实例发送通知以刷新。在这里,您有一个使用协议来实现此目的的很好的例子。
https://academy.realm.io/posts/architecting-a-robust-color-system-swift-tryswift-2017-ragone/