【发布时间】:2016-05-08 11:06:50
【问题描述】:
从 Swift 调用 C 非常简单,但是我正在考虑在 C 中创建一个双向包装器,因此我的 C 必须调用 Swift 函数。
现在,我可以通过在 C 中声明函数指针来做到这一点,并让我的 C 函数在 Swift 端将它们设置为调用 Swift 中的代码后调用它们。
我的 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我可以看看吗?
【问题讨论】: