来自外部库的Swift函数未导入

时间:2019-10-20 01:01:37

标签: swift xcode import libraries swift-package-manager

我正在尝试创建一个外部swift库,其中包含可以在其他项目中调用的功能。我遵循了在Swift中创建库的基本步骤

我跑了

swift package init

我的package.swift看起来像

import PackageDescription

let package = Package(
    name: "TestProject",
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "TestProject",
            targets: ["TestProject"]),
    ],
    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 which this package depends on.
        .target(
            name: "TestProject",
            dependencies: []),
        .testTarget(
            name: "TestProject",
            dependencies: ["TestProject"]),
    ]
)

并运行swift package generate-xcodeproj进行项目。

然后将项目上传到Github,并使用Swift Package Manager将其加载到另一个项目中。它加载得很好。

我创建了一个简单的SwiftUI项目来测试我的库。在库中,我添加了功能

func test() -> String{
    return("This was good!")
}

,然后在项目中的ContentView.swift文件中,在导入语句(正确构建)中添加了import TestProject,并尝试通过设置将test()默认设置为Text("Hello World"),以查看其是否有效。

系统提示我错误,指出未定义Text(test())

  

使用未解决的标识符“ test”

我不确定在导入库方面我出了什么问题,而尝试研究这一点时发现却很少。

我的TestProject.swift文件位于“ / Sources / TestProject /”中,是通过init上的swift生成的

test()

我的contentView.swift文件

struct SwiftSciduct {
    var text = "Hello, World!"
}

func test() -> String{
    return("This was good!")
}

有点茫然为什么在主项目中无法使用此功能。

1 个答案:

答案 0 :(得分:1)

您无法访问test(),因为它默认为internal访问级别。您需要将其标记为publicopen才能使其他模块看到它。