Swift 不同目标之间的颜色资产

Swift Color Assets between different targets

我有一个应用程序有几个不同的目标。我用一组颜色创建了两个不同的资产文件夹。两个资产文件夹的每种颜色都具有相同的名称,但颜色不同。

我在代码中这样调用颜色代码:let color = UIColor(named: "primary")。然而,当我 运行 应用程序在不同的目标上时,它会从另一个目标中提取原色。这两个文件都只针对适当的目标进行检查,而未针对所有其他目标进行检查。

我正在尝试使用相同的名称,但目标之间的颜色不同。有人对我有什么建议吗? :)

猜测 UIColor(named: "primary", in: bundleFromTheRightTarget, compatibleWith: nil) 足以消除应该从哪个位置加载的歧义

不要使用资产,为每个主题使用一个协议和多个文件,使用资产可能会导致您将来崩溃,因为您必须知道颜色集的确切名称,并使用颜色名称作为字符串整个应用程序。

为每个主题使用协议将确保所有主题都具有您需要的颜色和字体。

这里。我创建了一个项目来演示如何实现 multiThemes

https://github.com/msistemas26/multipleThemesSwift

提供的两个答案都很好。但从 2021 年开始,最好的方法可能是将这两种方法结合起来。使用将从主包解析颜色的协议,并在协议内部使用 class,从颜色集中解析颜色。

你在这个class中错误命名颜色的可能性很低。

这样混合的好处是,您可以在一个地方使用动态颜色来实现高对比度(可访问性)、暗模式和正常颜色。当用户更改设置时,您的应用程序颜色正在发生变化。你仍然可以测试它,因为你正在使用协议来包装这些颜色。