从Swift调用C函数非常简单,但我正在研究如何创建一个双向的C包装器,以便我的C代码可以调用Swift函数。
现在,我可以通过在C中声明函数指针,并在Swift端设置它们以调用Swift代码后,让我的C函数调用它们来完成这个目标。
我的C头文件:
typedef void (*callback_t)(void);
void callBackIntoSwift( callback_t cb );
我的C语言实现文件:
#include "stuff.h"
#include <stdio.h>
void callBackIntoSwift( callback_t cb )
{
printf( "Will call back into Swift\n" );
cb();
printf( "Did call back into Swift\n" );
}
在桥接头文件中包含我的C头文件后,我可以在Swift侧执行以下操作:
let cb: callback_t = {
someKindOfSwiftFunction()
}
callBackIntoSwift( cb )
或者甚至:
callBackIntoSwift {
someKindOfSwiftFunction()
}
有没有更好的方法可以做到这一点,而不需要使用函数指针和回调?我想让C端直接调用someKindOfSwiftFunction
…但是当我尝试将@convention (c)
应用于函数声明时,我收到了这样的消息:该属性只能应用于类型,而不是声明。
是否有任何想法或者在Github上可以查看的代码库?