首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用在多个swift-package-manager目标中定义的相同类/结构时出错

尝试使用在多个swift-package-manager目标中定义的相同类/结构时出错
EN

Stack Overflow用户
提问于 2021-03-08 19:15:04
回答 1查看 171关注 0票数 0

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

MyLibraryTargetOneMyLibraryTargetTwo中都定义了MyModel

下面是我的SPM清单

代码语言:javascript
复制
// 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"]
    ),
  ]
)

是我做错了什么,还是它不受支持?

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 20:27:07

我试图重现你的问题,但失败了-这实际上是一件好事,因为这意味着有一个可以修复的错误;)

我用Xcode创建了一个单独的包项目,这是一个包含另外两个库的库产品。文件结构如下图所示:

Package.swift文件:

代码语言:javascript
复制
// 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文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
public struct MyModel {
    public init() {}
}

XCTest文件:

代码语言:javascript
复制
import XCTest
import LibraryB
import LibraryA
import MyLibrary

final class MyLibraryTests: XCTestCase {
    func testExample() {
        _ = MyModel(a: LibraryA.MyModel(), b: LibraryB.MyModel())
    }
}

一切都按照预期进行了编译和链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66528789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档