我想知道是否可以从C ++调用Swift函数?如果是,怎么样?我知道我们可以从Swift调用C ++函数,但我还没有找到关于此的确切答案。
答案 0 :(得分:1)
虽然没有官方的方法可以直接从 C 调用 Swift 函数,但您可以设置一个可从 C 调用的函数指针。这是否对您有帮助取决于您的具体情况。例如,在 Apple 平台上,它对于与使用 C 回调的 C API(例如 CFRunLoop 观察者)进行集成非常有用。
粘贴在下面的是一个没有任何苹果风格的例子。
分享和享受 — 奎因“爱斯基摩人!” Apple 开发者关系、开发者技术支持、核心操作系统/硬件 让 myEmail = "eskimo" + "1" + "@apple.com"
// main.swift
private func printGreeting(modifier: UnsafePointer<CChar>) {
print("Hello \(String(cString: modifier))World!")
}
var callbacks = SomeCLibCallbacks(
printGreeting: { (modifier) in
printGreeting(modifier: modifier)
}
)
SomeCLibSetup(&callbacks)
SomeCLibTest()
// SomeCLib.h
#ifndef SomeCLib_h
#define SomeCLib_h
struct SomeCLibCallbacks {
void (* _Nonnull printGreeting)(const char * _Nonnull modifier);
};
typedef struct SomeCLibCallbacks SomeCLibCallbacks;
extern void SomeCLibSetup(const SomeCLibCallbacks * _Nonnull callbacks);
extern void SomeCLibTest(void);
#endif
// SomeCLib.c
#include "SomeCLib.h"
static SomeCLibCallbacks sCallbacks;
extern void SomeCLibSetup(const SomeCLibCallbacks * callbacks) {
sCallbacks = *callbacks;
}
extern void SomeCLibTest(void) {
sCallbacks.printGreeting("Cruel ");
}
来源:https://forums.swift.org/t/best-way-to-call-a-swift-function-from-c/9829/2