我正在尝试使用CGEventTapCreate(...)
在swift中设置事件点按。这会将CGEventTapCallback
函数指针作为其参数之一。
据我所知,在当前测试版中没有办法将swift函数作为c函数指针传递。
我做的是像往常一样在Objective C中编写回调:
// callback.h
CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
void *refcon);
// callback.m
CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
void *refcon)
{
return NULL;
}
然后将导入添加到我的桥接标题:
// project-Bridging-Header.h
#import "callback.h"
这正确地将函数暴露给swift。但是,它通过将函数的类型转换为swift函数来实现。
因此,我仍然无法将其作为CGEventTapCreate(...)
是否有内置函数将桥接函数转换为函数指针?
答案 0 :(得分:1)
我在这里添加了一种解决方法,但我不喜欢它。
基本上,您只需直接公开函数指针:
// callback.h
CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
void *refcon);
extern CGEventTapCallBack callback_ptr;
// callback.m
#import callback.h
CGEventTapCallBack callback_ptr = callback;
CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
void *refcon)
{
return NULL;
}