我正在开发一个包库,这样我就可以在多个扩展之间共享代码。我想引用一个位于包库Assets.xcassets中的命名颜色。
Assets.xcassets
下面的代码是在程序包库中编写的,没有按预期工作。
let testColor = Color("whiteNoteColor")
找不到Assets.xcassets中定义的whiteNoteColor。我能知道正确的方法是什么吗?谢谢。
bq9c1y661#
当资产作为包的一部分保存时,您必须指定捆绑包。
let testColor = Color("whiteNoteColor", bundle: .module)
请注意,这在SwiftUI预览中可能有点粗略,具体取决于目标。如果你想在包外访问这些颜色,你应该把它们公开为公共属性,定义类似于上面的代码--不要试图把Bundle.module公开,也不要让外部代码尝试使用命名的资源,这样做不会有好结果。
Bundle.module
bnl4lu3b2#
若要从资源读取颜色,必须将其称为UIColor(named:),然后将其转换为Color类型。您可以通过创建Color类型的扩展来轻松地访问该颜色,然后它就像其他任何颜色一样。就像这样:
UIColor(named:)
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
2条答案
按热度按时间bq9c1y661#
当资产作为包的一部分保存时,您必须指定捆绑包。
请注意,这在SwiftUI预览中可能有点粗略,具体取决于目标。
如果你想在包外访问这些颜色,你应该把它们公开为公共属性,定义类似于上面的代码--不要试图把
Bundle.module
公开,也不要让外部代码尝试使用命名的资源,这样做不会有好结果。bnl4lu3b2#
若要从资源读取颜色,必须将其称为
UIColor(named:)
,然后将其转换为Color
类型。您可以通过创建
Color
类型的扩展来轻松地访问该颜色,然后它就像其他任何颜色一样。就像这样:
您可以在代码中使用它: