关于SPM的文档很差,大多数关于它的文章都是在SPM开始时发布的。
我在Swift中实现了一种算法(匈牙利算法),并期待将其作为Github中的库发布。我不得不在这个项目中第一次使用SPM来解决另一个依赖项,一旦它开始工作,它就完美了。
现在,我无法在其他项目中使用我的库。我决定从一个新的git repo开始,因为我无法使之前的工作。
该库名为Hume,它有一个定义Hume类的Hume.swift文件。
我所经历的步骤是:
swift package init --type library
swift package init --type executable
swift build
此时,swift克隆了库的repo并且没有问题地编译它(因为main.swift只包含一个Hello世界)。
swift package generate-xcodeproj
当我打开项目并尝试导入我的库时,似乎可以识别模块名称但是当我尝试声明一个对象时,它说我不能声明一个模块类型的变量。 / p>
这是库中的Package.swift文件:
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "Hume",
products: [
.library(
name: "Hume",
targets: ["Hume"]),
],
dependencies: [
.package(url: "https://github.com/aleph7/Upsurge.git", from: "0.10.2"),
],
targets: [
.target(
name: "Hume",
dependencies: ["Upsurge"]),
.testTarget(
name: "HumeTests",
dependencies: ["Hume"]),
]
)
图书馆只有一个具有此风格的文件:
import Upsurge
class Hume {
// Attributes
....
init(matriz:[[Double]]){
....
}
public func resuelve() -> (Double, [(Int, Int)]){
....
}
}
这是虚拟可执行文件中的Package.swift:
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "aa",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(url: "https://github.com/Jasagredo/Hume.git", from: "0.1.1"),
],
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: "aa",
dependencies: ["Hume"]),
]
)
构建时的输出:
~/Desktop/aa swift build
Fetching https://github.com/Jasagredo/Hume.git
Fetching https://github.com/aleph7/Upsurge.git
Cloning https://github.com/Jasagredo/Hume.git
Resolving https://github.com/Jasagredo/Hume.git at 0.1.1
Cloning https://github.com/aleph7/Upsurge.git
Resolving https://github.com/aleph7/Upsurge.git at 0.10.2
Compile Swift Module 'Upsurge' (30 sources)
Compile Swift Module 'Hume' (1 sources)
Compile Swift Module 'aa' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/aa
~/Desktop/aa
但是当我在虚拟可执行文件中编辑main.swift时,我发现了这个错误:
import Hume
var a = Hume(matriz: [[1,1],[1,1]]) //Cannot call value of non-function type 'module<Hume>'
另外,Xcode不会自动建议我休姆课程。我只是不知道我做错了什么。
感谢任何帮助。
答案 0 :(得分:0)
我终于设法让事情发挥作用了。问题是类(并且它的init方法)未被声明为public
。其余配置是正确的。