从另一个类 swift 访问变量



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

用户在特殊的"主题
  1. "页面中按下主题后,将有一个变量(我们只称变量为"主题"(发生了变化
  2. 根据变量的值,其他页面将更改其颜色、样式等。

我之所以问这个问题,是因为我不确定其他视图控制器如何访问变量"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/

最新更新