从 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 在开发论坛上向我确认,目前不支持此功能,并要求我在 bugreporter 上填写新请求。
此外,我向读者提供了另一个细节:
似乎在编译的二进制文件中,所有 swift 函数的符号都已可用,并且已桥接​​以便从 C 访问(即使在仅限 swift 的应用程序中)
我制作了一个名为 FunctionTest 的应用程序,iPhone App 使用此函数在 swift 文件中
func thisIsATestFunction() { println("test")
编译,然后从终端:
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
所以我认为这已经是正在进行的工作......希望他们能在下一个版本中实现这个功能:-)