我有一个C函数,我在Swift包装器函数中调用它。现在,我想用这个Swift包装器函数创建一个Swift-package。然而,我做错了一些事情。
这是C-函数,它增加了2个双精度值。
// addDoubles.c
#include <math.h>
#include "addDoubles.h"
double addDoubleWithC(double val1, double val2) {
return val1 + val2;
}以下是带有包装函数的Swift文件:
// WrappedCFunctions.swift
import Foundation
public struct WrappedCFunctions {
public static func addDoubles(val1:Double, val2:Double) -> Double{
let resulFromCFunction = addDoubleWithC(val1, val2)
return resulFromCFunction
}
}在viewController中,我使用了这个函数:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let val1 = 1.11
let val2 = 2.22
let result = WrappedCFunctions.addDoubles(val1: val1, val2: val2)
let txt = String(val1) + " + " + String(val2) + " = " + String(result)
textLabel.text = txt
}
}项目结构如下:

这个应用程序运行正常,正如预期的那样。
在下一步中,我使用File-> New-> Swift Packe创建了一个名为Math的包。然后,我将文件WrappedCFunctions.swift从AddDoubles文件夹移动到包的CMath/Source/CMath文件夹中。在下一步中,我将包包含到项目中。这将导致以下结构:

最后但并非最不重要的一点是,我在ViewController.swift中添加了一条Import CMath语句并构建了项目。
但是,该包不被识别。

如何解决这个问题?
发布于 2019-10-02 05:59:13
如果看不到你的Package.swift文件,就不可能知道你的包是否安装正确。看着你发布的图片,我最好的猜测是它没有正确配置。
我猜测的原因是,当您需要2个目标时,您的Sources/中只有1个目录(通常在SwiftPM中,每个目标有1个目录,而我在包中看不到任何.c文件)。C代码需要成为Swift目标所依赖的目标。然后你就有了一个依赖于Swift目标的产品。该产品就是您将在Xcode中链接和导入的产品。
如果您查看我的this代码库,我使用C和Swift,所以您可以看到我是如何设置Package.swift来构建2个目标的。
https://stackoverflow.com/questions/58150407
复制相似问题