如何在swift中编写HID函数Handle_DeviceMatchingCallback?
How to write HID function Handle_DeviceMatchingCallback in swift?
我有一个关于 HID 的程序。但是写在Objective-C。这是一个项目,我的朋友们只知道 swift。所以我想把它转换成swift,但我不知道怎么写那个函数。
Obj-c 代码:
/* Creating The HID Manager */
IOHIDManagerRef manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
/* Dictionary Matching - All the devices */
IOHIDManagerSetDeviceMatching(manager,NULL);
/* Connected and Disconnected Call Backs */
IOHIDManagerRegisterDeviceMatchingCallback(manager, &Handle_DeviceMatchingCallback , NULL);
IOHIDManagerRegisterDeviceRemovalCallback(manager, &Handle_DeviceRemovalCallback,NULL);
回调函数为:
static void Handle_DeviceMatchingCallback(void *inContext,
IOReturn inResult,
void *inSender,
IOHIDDeviceRef inIOHIDDeviceRef)
{
printf("Connected\n");
}
static void Handle_DeviceRemovalCallback(void *inContext,
IOReturn inResult,
void *inSender,
IOHIDDeviceRef inIOHIDDeviceRef)
{
printf("Disconnected\n");
}
在swift,
我把Handle_DeviceMatchingCallback()
写成了
func Handle_DeviceMatchingCallback(inContext: UnsafeMutableRawPointer!, inResult: IOReturn, inSender: UnsafeMutableRawPointer!, inIOHIDDeviceRef: IOHIDDevice)
{
print("Connected")
}
但是我无法将函数传递给IOHIDManagerRegisterDeviceMatchingCallback()
。
怎么做?
处理您的案例的一种方法是将回调作为闭包:
let Handle_DeviceMatchingCallback: IOHIDDeviceCallback = {context, result, sender, device in
print("Connected")
}
let Handle_DeviceRemovalCallback: IOHIDDeviceCallback = {context, result, sender, device in
print("Disconnected")
}
否则,您需要使用与 IOHIDDeviceCallback
中定义的签名完全相同的签名来声明回调函数。
typealias IOHIDDeviceCallback = (UnsafeMutableRawPointer?, IOReturn,
UnsafeMutableRawPointer?, IOHIDDevice) -> Void
(摘自 Xcode 的快速帮助。)
func Handle_DeviceMatchingCallback(_ context: UnsafeMutableRawPointer?, _ result: IOReturn, _ sender: UnsafeMutableRawPointer?, _ device: IOHIDDevice) {
print("Connected")
}
func Handle_DeviceRemovalCallback(_ context: UnsafeMutableRawPointer?, _ result: IOReturn, _ sender: UnsafeMutableRawPointer?, _ device: IOHIDDevice) {
print("Disconnected")
}
我有一个关于 HID 的程序。但是写在Objective-C。这是一个项目,我的朋友们只知道 swift。所以我想把它转换成swift,但我不知道怎么写那个函数。
Obj-c 代码:
/* Creating The HID Manager */
IOHIDManagerRef manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
/* Dictionary Matching - All the devices */
IOHIDManagerSetDeviceMatching(manager,NULL);
/* Connected and Disconnected Call Backs */
IOHIDManagerRegisterDeviceMatchingCallback(manager, &Handle_DeviceMatchingCallback , NULL);
IOHIDManagerRegisterDeviceRemovalCallback(manager, &Handle_DeviceRemovalCallback,NULL);
回调函数为:
static void Handle_DeviceMatchingCallback(void *inContext,
IOReturn inResult,
void *inSender,
IOHIDDeviceRef inIOHIDDeviceRef)
{
printf("Connected\n");
}
static void Handle_DeviceRemovalCallback(void *inContext,
IOReturn inResult,
void *inSender,
IOHIDDeviceRef inIOHIDDeviceRef)
{
printf("Disconnected\n");
}
在swift,
我把Handle_DeviceMatchingCallback()
写成了
func Handle_DeviceMatchingCallback(inContext: UnsafeMutableRawPointer!, inResult: IOReturn, inSender: UnsafeMutableRawPointer!, inIOHIDDeviceRef: IOHIDDevice)
{
print("Connected")
}
但是我无法将函数传递给IOHIDManagerRegisterDeviceMatchingCallback()
。
怎么做?
处理您的案例的一种方法是将回调作为闭包:
let Handle_DeviceMatchingCallback: IOHIDDeviceCallback = {context, result, sender, device in
print("Connected")
}
let Handle_DeviceRemovalCallback: IOHIDDeviceCallback = {context, result, sender, device in
print("Disconnected")
}
否则,您需要使用与 IOHIDDeviceCallback
中定义的签名完全相同的签名来声明回调函数。
typealias IOHIDDeviceCallback = (UnsafeMutableRawPointer?, IOReturn, UnsafeMutableRawPointer?, IOHIDDevice) -> Void
(摘自 Xcode 的快速帮助。)
func Handle_DeviceMatchingCallback(_ context: UnsafeMutableRawPointer?, _ result: IOReturn, _ sender: UnsafeMutableRawPointer?, _ device: IOHIDDevice) {
print("Connected")
}
func Handle_DeviceRemovalCallback(_ context: UnsafeMutableRawPointer?, _ result: IOReturn, _ sender: UnsafeMutableRawPointer?, _ device: IOHIDDevice) {
print("Disconnected")
}