Mik*_*ike 9 c xcode lua ios 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);
Run Code Online (Sandbox Code Playgroud)
我使用桥接头来访问库,从我的Swift代码中我可以毫无困难地调用lua_setuservalue.但是,如果我尝试调用lua_callk,我会"使用未解析的标识符'lua_callk'".如果我从lua_callk的声明中删除函数指针,我不再收到此错误.任何帮助都非常感谢.
Jim*_*yes 17
这个答案涉及Swift语言的早期版本,可能不再可靠.
虽然在Swift 中没有 C函数指针,但仍然可以使用swift闭包,它们作为块传递给C函数.
这样做需要在C中使用一些"填充"例程来获取块并将其包装在C函数中.以下演示了它的工作原理.
迅速:
func foo(myInt: CInt) -> CInt {
return myInt
}
var closure: (CInt) -> CInt = foo;
my_c_function(closure)
Run Code Online (Sandbox Code Playgroud)
C:
void my_c_function(int (^closure)(int))
{
int x = closure(10);
printf("x is %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)
当然,您选择使用闭合装置,以及如何存储和调用它以供使用取决于您.但这应该给你一个开始.
TiL*_*gic 10
从beta 3开始,Apple已经提供了函数指针,但是它们只能被引用而不被称为.
功能指针
C函数指针被导入到Swift中
CFunctionPointer<Type>,其中Type是Swift函数类型.例如,具有int (*)(void)C语言类型的函数指针被导入Swift asCFunctionPointer<() -> Int32>
Beta 3发行说明(PDF)
函数指针现在也被导入,可以被引用和传递.但是,您无法调用C函数指针或将闭包转换为C函数指针类型.