我想为在不同的SPM目标中定义的class或struct提供相同的名称,但我得到以下错误:


在MyLibraryTargetOne和MyLibraryTargetTwo中都定义了MyModel
下面是我的SPM清单
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "MyLibrary",
targets: ["MyLibrary"]
),
.library(
name: "MyLibraryTargetOne",
targets: ["MyLibraryTargetOne"]
),
.library(
name: "MyLibraryTargetTwo",
targets: ["MyLibraryTargetTwo"]
),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "MyLibrary",
dependencies: ["MyLibraryTargetOne", "MyLibraryTargetTwo"]
),
.target(
name: "MyLibraryTargetOne",
dependencies: ["MyLibraryCore"]
),
.target(
name: "MyLibraryTargetTwo",
dependencies: ["MyLibraryCore"]
),
.target(
name: "MyLibraryCore",
dependencies: []
),
.testTarget(
name: "MyLibraryTest",
dependencies: ["MyLibrary"]
),
]
)是我做错了什么,还是它不受支持?
发布于 2021-03-09 20:27:07
我试图重现你的问题,但失败了-这实际上是一件好事,因为这意味着有一个可以修复的错误;)
我用Xcode创建了一个单独的包项目,这是一个包含另外两个库的库产品。文件结构如下图所示:

Package.swift文件:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
.library(name: "MyLibrary", targets: ["MyLibrary"]),
.library(name: "LibraryA", targets: ["LibraryA"]),
.library(name: "LibraryB", targets: ["LibraryB"]),
],
dependencies: [],
targets: [
.target(name: "MyLibrary",dependencies: ["LibraryA", "LibraryB"]),
.target(name: "LibraryA",dependencies: []),
.target(name: "LibraryB",dependencies: []),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]),
]
)下面是来自MyLibrary的Swift文件:
import LibraryA
import LibraryB
public struct MyModel {
public let a: LibraryA.MyModel
public let b: LibraryB.MyModel
public init(a: LibraryA.MyModel, b: LibraryB.MyModel) {
self.a = a
self.b = b
}
}A LibraryA/B文件:
public struct MyModel {
public init() {}
}XCTest文件:
import XCTest
import LibraryB
import LibraryA
import MyLibrary
final class MyLibraryTests: XCTestCase {
func testExample() {
_ = MyModel(a: LibraryA.MyModel(), b: LibraryB.MyModel())
}
}一切都按照预期进行了编译和链接。
https://stackoverflow.com/questions/66528789
复制相似问题