swift 如何引用位于软件包库的Assets.xcassets中的命名颜色?

sxpgvts3  于 2022-12-22  发布在  Swift
关注(0)|答案(2)|浏览(159)

我正在开发一个包库,这样我就可以在多个扩展之间共享代码。
我想引用一个位于包库Assets.xcassets中的命名颜色。

下面的代码是在程序包库中编写的,没有按预期工作。

let testColor = Color("whiteNoteColor")

找不到Assets.xcassets中定义的whiteNoteColor
我能知道正确的方法是什么吗?谢谢。

bq9c1y66

bq9c1y661#

当资产作为包的一部分保存时,您必须指定捆绑包。

let testColor = Color("whiteNoteColor", bundle: .module)

请注意,这在SwiftUI预览中可能有点粗略,具体取决于目标。
如果你想在包外访问这些颜色,你应该把它们公开为公共属性,定义类似于上面的代码--不要试图把Bundle.module公开,也不要让外部代码尝试使用命名的资源,这样做不会有好结果。

bnl4lu3b

bnl4lu3b2#

若要从资源读取颜色,必须将其称为UIColor(named:),然后将其转换为Color类型。
您可以通过创建Color类型的扩展来轻松地访问该颜色,然后它就像其他任何颜色一样。
就像这样:

extension Color {
    
    static var whiteNoteColor: Color { Color(UIColor(named: "whiteNoteColor") ?? UIColor(Color.white)) }
}

您可以在代码中使用它:

Text("My text in white")
    .foregroundColor(.whiteNoteColor)  // Cal it as if it were a system color

相关问题