Я пишу небольшую утилиту в swift, которая регистрирует обратный вызов, используя IOHIDManagerRegisterInputValueCallback
. Я стараюсь быть хорошим гражданином и убирать за собой.
[Документация] (https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html#//apple_ref/doc/uid/TP40000970-CH214-SW61) говорит, что для отмены регистрации необходимо вызвать функцию регистрации с Null
Примечание. Чтобы отменить регистрацию, передайте NULL для обратного вызова.
К сожалению
IOHIDManagerRegisterInputValueCallback( hidManager, nil , nil);
не компилируется говоря:
Nil не совместим с ожидаемым типом аргумента 'IOHIDValueCallback' (он же '@convention(c) (необязательно, Int32, необязательно, IOHIDValue) -> ()')
Как я могу привести nil к правильному типу?
Вот пример кода, который должен скомпилироваться:
import Foundation
import Carbon
import IOKit
import IOKit.usb
import IOKit.hid
class IOEventManager{
func start()->Void{
let hidManager = IOHIDManagerCreate( kCFAllocatorDefault, IOOptionBits(kIOHIDOptionsTypeNone) );
let context = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque());
IOHIDManagerRegisterInputValueCallback( hidManager, nil, context);
}
}
если вам нужен полный проект, проверьте https://github.com/jeantil/autokbisw и посмотрите на IOKeyEventMonitor#deinit