从C++调用Swift函数

5
我在想是否可能从C++调用Swift函数?如果可以,怎么做呢?我知道我们可以从Swift调用C++函数,但我还没有找到关于这个问题的确切答案。

1
你想知道它是否可以完成,还是如何完成它? - Captain Obvlious
@CaptainObvlious 可能两者都有。 - James Parsons
1
我投票关闭这个问题,因为它会引发简单的是或否的回答,而在这种情况下对社区没有益处。 - Captain Obvlious
3
好的,如果只是布尔值问题,为什么到现在还没有人给出正确的回答(是或否)?我认为这是一个学习更多的好机会。 - dede.exe
@CaptainObvlious,我刚刚编辑了这个问题。 - Nav Nav
我也在寻找答案,有人已经有解决方案了吗? - Lysdexia
1个回答

1
虽然没有官方的方法可以直接从C中调用Swift函数,但是您可以设置一个函数指针,该指针可从C中调用。这是否有助于您取决于您的具体情况。例如,在Apple平台上,它非常有用,可与使用C回调的C API集成(例如CFRunLoop观察者等)。
下面粘贴了一个不涉及任何Apple内容的示例。
分享并享受 - Quinn“Eskimo!” 苹果开发者关系,开发者技术支持,核心操作系统/硬件 我的电子邮件是“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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接