我有一个C函数,在Swift包装函数中调用它。 现在,我想用这个Swift包装函数创建一个Swift包。 但是,我做错了。
这是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语句并构建了项目。
但是,该包裹无法识别。
如何解决此问题?
答案 0 :(得分:1)
没有看到您的Package.swift
文件,就无法知道您的软件包安装是否正确。查看您发布的图片,我可能得出的最好猜测是它的配置不正确。
我猜这是因为Sources/
中只有1个目录,而您需要2个目标(通常使用SwiftPM,每个目标1个目录,而我看不到任何.c文件包装)。 C代码将成为Swift目标所依赖的目标。然后,您有一个依赖于Swift目标的产品。该产品就是您要链接并导入Xcode的产品。
如果您查看我拥有的this回购,我同时使用C和Swift,因此您可以看到如何设置Package.swift
来构建两个目标。