【发布时间】:2021-08-11 03:42:52
【问题描述】:
我正在使用 swift 包管理器。
我有一个模块ModuleA,它导出两种类型:ModuleA 和Test。
我有一个模块ModuleB,它定义了一个类型:Test。
在ModuleB 中,如何从ModuleA 引用类型Test?
理想情况下,我希望 #module(ModuleA) 等语法直接引用模块 ModuleA。
可重现的例子:
Package.swift:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "ShadowingTest",
products: [
.library(
name: "ModuleA",
targets: ["ModuleA"]),
.library(
name: "ModuleB",
targets: ["ModuleB"]),
],
dependencies: [
],
targets: [
.target(
name: "ModuleA",
dependencies: []),
.target(
name: "ModuleB",
dependencies: ["ModuleA"]),
]
)
Sources/ModuleA/ModuleA.swift:
public enum ModuleA {}
public struct Test {
public static let module: String = "ModuleA"
}
Sources/ModuleB/ModuleB.swift:
import ModuleA
struct Test {
static let module: String = "ModuleB"
}
func test() {
print(ModuleA.Test.module)
}
运行swift build 出现错误
Sources/ModuleB/ModuleB.swift:8:19: error: type 'ModuleA' has no member 'Test'
但是当从ModuleA 中的ModuleA 枚举中删除public 时会成功。
【问题讨论】: