一尘不染

Swift不能使用函数指针吗?

swift

我正在尝试在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
的声明中删除了函数指针,则不会再出现此错误。任何帮助都非常感谢。


阅读 258

收藏
2020-07-07

共1个答案

一尘不染

Apple已从beta 3开始提供函数指针,但是只能引用它们而不调用它们。

将Swift与Cocoa和Objective-
C结合使用

功能指针

C函数指针作为导入到Swift中CFunctionPointer<Type>,这Type是Swift函数类型。例如,将类型int (*)(void)为C 的函数指针导入到Swift中,如下所示:CFunctionPointer<() -> Int32>

Beta
3发行说明
(PDF)

现在也可以导入函数指针,并且可以对其进行引用和传递。但是,您不能调用C函数指针或将闭包转换为C函数指针类型。

2020-07-07