如何实现导入自定义Swift Package时自动导入SwiftUI?
如何让自定义SwiftUI Package导入时自动附带SwiftUI?
背景
我开发了一个高度依赖SwiftUI的自定义SwiftUI Package,现在在项目里用它的时候,必须手动同时导入SwiftUI和MyCustomPackage。但像导入UIKit或SwiftUI时会自动导入Foundation那样,我希望自己的Package也能实现这个效果。
代码示例
// 示例:导入SwiftUI时自动导入Foundation import SwiftUI
// 当前现状:必须手动同时导入两个模块 import SwiftUI import MyCustomPackage
问题
怎么把SwiftUI和MyCustomPackage绑定在一起,让用户只需要显式导入MyCustomPackage就能同时用SwiftUI的内容?
解决方案
你可以通过以下两种方式实现自动导入的效果:
方法1:用@_exported关键字导出SwiftUI(推荐)
在你的Package主入口源文件中,使用@_exported关键字导出SwiftUI。这样用户导入你的Package时,SwiftUI会被自动引入:
// MyCustomPackage的主入口文件(比如MyCustomPackage.swift) @_exported import SwiftUI // 你的Package核心代码示例 public struct MyCustomButton: View { public var title: String public var action: () -> Void public var body: some View { Button(title, action: action) .padding() .background(Color.accentColor) .foregroundColor(.white) .cornerRadius(8) } }
注:
@_exported是Swift未正式文档化的特性,但在Swift Package场景中被广泛使用,实际稳定性有保障。
方法2:配合Package配置确保依赖关联
在Package.swift中正确声明你的Package信息,确保Swift Package Manager能识别模块关联:
// Package.swift let package = Package( name: "MyCustomPackage", platforms: [ .iOS(.v14), .macOS(.v11) // 根据你的最低兼容版本调整 ], products: [ .library( name: "MyCustomPackage", targets: ["MyCustomPackage"]), ], targets: [ .target( name: "MyCustomPackage", dependencies: []), .testTarget( name: "MyCustomPackageTests", dependencies: ["MyCustomPackage"]), ] )
结合方法1的配置后,用户只需一行导入就能同时使用你的Package和SwiftUI的所有API:
import MyCustomPackage // 直接使用SwiftUI和自定义Package内容 struct DemoView: View { var body: some View { VStack { Text("Hello SwiftUI") MyCustomButton(title: "Click Me") { print("Button tapped") } } } }
内容的提问来源于stack exchange,提问作者christophriepe
相关产品推荐
相关产品推荐

