从C到Swift的函数回调

我有这个C函数简单地回调作为参数传递的另一个函数

void call_my_function(void (*callback_function)())
{
    callback_function();
}

这是C测试代码:

void func_to_call()    // a simple test function passed in as a callback
{
    printf("function correctly called");
}

void test()   // entry point
{
    void (*foo)();
    foo = &func_to_call;
    call_my_function(foo);     // pass the address of "func_to_call()" to "call_my_function()"
}

本质上,从test(),我调用call_my_function()传递func_to_call()的地址,然后call_my_function()调用func_to_call().

从swift我正确看到函数test()和func_to_call(),但似乎是这样

void call_my_function(void (*callback_function)())

无法识别(使用未解析的标识符)
如果我删除参数void(* callback_function)(),则再次识别该函数.

如何将Swift函数地址传递给C并将其调回?可能吗?
谢谢

最佳答案 Apple在开发论坛上证实了我现在不支持它,并要求我在bug报告器上填写新的请求.

而且,我向读者提供了另一个细节:

似乎在编译的二进制文件中,所有swift函数的符号都已经可用并且可以从C进行桥接(即使在一个仅限swift的应用程序中)

我在swift文件中创建了一个名为FunctionTest,iPhone App的应用程序

func thisIsATestFunction()
{
    的println( “测试”)
}

编译,然后从终端:

nc /Users/xxx/Library/Developer/Xcode/DerivedData/FunctionTest-hhrbtzsuyrdoftfnbakosvenaiak/Build/Products/Debug-iphonesimulator/FunctionTest.app/FunctionTest

     U _NSStringFromClass
     U _OBJC_CLASS_$_NSString
     U _OBJC_CLASS_$_UIResponder
     U _OBJC_CLASS_$_UIViewController
     U _OBJC_CLASS_$_UIWindow
000088c8 S _OBJC_CLASS_$__TtC12FunctionTest11AppDelegate
00008888 S _OBJC_CLASS_$__TtC12FunctionTest14ViewController
.........
.........
00003840 T __TF12FunctionTest19thisIsATestFunctionFT_T_          <--- this is my test function

从c调用地址00003840执行该功能

void (* func)() = 0x00003840;
func();    // the swift function is executed

所以我认为这已经在进行中了…希望他们将在下一个版本中实现这个功能:-)

点赞