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

Swift function from external library not importing

我正在尝试创建一个外部 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 包管理器将其加载到不同的项目中。它加载得很好。

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

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

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

我收到一条错误提示,指出 test() 未定义

Use of unresolved identifier 'test'

就导入我的库而言,我不确定我哪里出错了,而且在尝试研究这个问题时我发现的很少。

我的 TestProject.swift 文件位于 `/Sources/TestProject/' 中,由 swift 在 init

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

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

我的contentView.swift文件

import SwiftUI
import TestProject

struct ContentView: View {
    var body: some View {
        Text(test())
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

有点不知所措为什么这个功能在主项目中不可用。

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