如何在 Xcode 11 包管理器中处理 C 文件?
How to handle C-Files in Xcode 11 package manager?
我有一个 C 函数,我在 Swift 包装函数中调用它。
现在,我想用这个 Swift 包装函数创建一个 Swift 包。
但是,我做错了。
这是将 2 个双精度值相加的 C 函数。
// 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 创建了一个名为 Math 的包。
然后我将文件 WrappedCFunctions.swift 从 AddDoubles 文件夹移动到包的 CMath/Source/CMath 文件夹中。在下一步中,我将包包含到项目中。这导致以下结构:
最后但同样重要的是,我在 ViewController.swift 中添加了一个 Import CMath 语句并构建了项目。
但是,无法识别包裹。
如何解决这个问题?
如果没有看到您的 Package.swift
文件,就不可能知道您的包是否设置正确。查看您制作的图片 post 我的最佳猜测是配置不正确。
我猜这是因为当您需要 2 个目标时,您的 Sources/
中只有 1 个目录(通常 SwiftPM 每个目标有 1 个目录,而我没有在包中看不到任何 .c 文件)。 C 代码需要成为 Swift 目标所依赖的目标。然后你有一个依赖于 Swift 目标的产品。该产品就是您 link 并在 Xcode 中导入的产品。
如果您查看我的 this 存储库,我会同时使用 C 和 Swift,这样您就可以看到我是如何设置 Package.swift
来构建 2 个目标的。
我有一个 C 函数,我在 Swift 包装函数中调用它。 现在,我想用这个 Swift 包装函数创建一个 Swift 包。 但是,我做错了。
这是将 2 个双精度值相加的 C 函数。
// 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 创建了一个名为 Math 的包。 然后我将文件 WrappedCFunctions.swift 从 AddDoubles 文件夹移动到包的 CMath/Source/CMath 文件夹中。在下一步中,我将包包含到项目中。这导致以下结构:
最后但同样重要的是,我在 ViewController.swift 中添加了一个 Import CMath 语句并构建了项目。
但是,无法识别包裹。
如何解决这个问题?
如果没有看到您的 Package.swift
文件,就不可能知道您的包是否设置正确。查看您制作的图片 post 我的最佳猜测是配置不正确。
我猜这是因为当您需要 2 个目标时,您的 Sources/
中只有 1 个目录(通常 SwiftPM 每个目标有 1 个目录,而我没有在包中看不到任何 .c 文件)。 C 代码需要成为 Swift 目标所依赖的目标。然后你有一个依赖于 Swift 目标的产品。该产品就是您 link 并在 Xcode 中导入的产品。
如果您查看我的 this 存储库,我会同时使用 C 和 Swift,这样您就可以看到我是如何设置 Package.swift
来构建 2 个目标的。