【问题标题】:Swift Package in workspace: import rule?工作区中的 Swift 包:导入规则?
【发布时间】:2022-12-18 22:24:41
【问题描述】:

我在我的工作空间中创建了一个 swift 包。

我遵循本指南只是为了测试一下:

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.xcassets 中删除了 customRed

现在一切正常,包使用包 Assets.xcassets 中定义的 customRed

我有很多文件在应用程序中使用 Color.customRed,我想我必须转到每个文件并在顶部为包添加导入语句。所以:

import MyColorPackage

问题:我不明白为什么不这样做应用程序就可以正常工作。文件可以使用 Color.customRed 调用,而无需在使用它的文件顶部添加 import MyColorPackage。如果文件中没有 import MyColorPackage,文件如何使用 customRed?应用程序运行良好,无需在使用 customRed 的文件中导入模块。为什么?

【问题讨论】:

    标签: ios swift swift-package-manager


    【解决方案1】:

    这样做的原因是由于一个长期存在的 swift 错误,所以你本身并没有做错任何事情。它有多种形式,有些是多年来固定的,有些不是,但在你的情况下,发生的是你的主项目中导入 MyColorPackage 的第一个文件将导致整个项目的其余部分“看到”该 Color 扩展。根据我的经验,现在这种情况只发生在公共扩展中,而你的包恰好就是这样做的——声明一个公共扩展到 SwiftUI 的 Color

    如果你在那个包中添加一些公共实体,比如说……

    import SwiftUI
    
    public enum MyColorTheme {
        public static let myThemeButtonsColor = Color.green
    }
    
    

    …然后你将无法在任何不导入MyColorPackage的文件中使用MyColorTheme,根据直观的正常情况。

    我建议在您使用该包中的符号时仍然添加缺少的导入,因为这个问题可能会在未来的版本中得到修复并且您的项目将无法构建

    参考:https://github.com/apple/swift/issues/46493

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-27
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      相关资源
      最近更新 更多