我正在尝试在Swift中使用C库,并且在调用任何将函数指针作为参数之一的函数时遇到麻烦。例如,我要在Swift中使用的lua.h文件的一部分看起来像这样:
LUA_API void (lua_setuservalue) (lua_State *L, int idx); typedef int (*lua_CFunction) (lua_State *L); LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, int ctx, lua_CFunction k);
我使用桥接头来访问库,并且从我的Swift代码中,我可以毫无困难地调用 lua_setuservalue 。但是,如果我尝试调用 lua_callk,则会 收到“使用未解析的标识符’lua_callk’”的信息。如果我从 lua_callk 的声明中删除了函数指针,则不会再出现此错误。任何帮助都非常感谢。
Apple已从beta 3开始提供函数指针,但是只能引用它们而不调用它们。
将Swift与Cocoa和Objective- C结合使用
功能指针 C函数指针作为导入到Swift中CFunctionPointer<Type>,这Type是Swift函数类型。例如,将类型int (*)(void)为C 的函数指针导入到Swift中,如下所示:CFunctionPointer<() -> Int32>
C函数指针作为导入到Swift中CFunctionPointer<Type>,这Type是Swift函数类型。例如,将类型int (*)(void)为C 的函数指针导入到Swift中,如下所示:CFunctionPointer<() -> Int32>
CFunctionPointer<Type>
Type
int (*)(void)
CFunctionPointer<() -> Int32>
Beta 3发行说明(PDF)
现在也可以导入函数指针,并且可以对其进行引用和传递。但是,您不能调用C函数指针或将闭包转换为C函数指针类型。