我在我的工作空间创建一个快速包。
我遵循以下指南只是为了测试一下:
https://sarunw.com/posts/how-to-modularize-existing-ios-projects-using-swift-package/
一切顺利。
我在软件包中添加的内容之一是:
public extension Color {
static let customRed:Color = Color(uiColor: UIColor(named: "customRed", in: .module, compatibleWith: nil)!)
}
在将Assets添加到实际包中后,我从主应用程序的Assets. xcassets中删除了customRed
。
现在一切正常,包使用Assets.xcassets包中定义的customRed
。
我有很多文件在应用程序中使用Color.customRed
,我想我必须去每个文件,并在顶部添加包的import语句。import MyColorPackage
问:我不明白为什么不这样做应用就能正常运行。文件可以使用Color.customRed
调用,而无需在使用它的文件顶部添加import MyColorPackage
。文件中没有import MyColorPackage
,文件如何使用customRed?应用在使用customRed的文件中无需导入模块就能正常运行。为什么?
1条答案
按热度按时间flseospp1#
这是因为一个长期存在的swift bug,所以你并没有做错任何事情。它有各种各样的形式,一些在过去的几年里得到了修复,有些不是,但在你的情况下,发生的是,在你的主项目中导入
MyColorPackage
的第一个文件将导致整个项目的其余部分"看到"该颜色扩展。根据我的经验,现在只有公共扩展才会出现这种情况,而你的包恰好就是这样做的--声明一个公共扩展给SwiftUI的Color如果您在包中添加一些公共实体,比如...
...那么您将无法在任何不导入
MyColorPackage
的文件中使用MyColorTheme
,这在直觉上是正常的。我建议您在使用该包中的符号时仍然添加缺少的导入,因为这个问题可能会在将来的版本中得到修复,并且您的项目将无法构建
参考:https://github.com/apple/swift/issues/46493