Я пишу небольшую утилиту в swift, которая регистрирует обратный вызов с использованием IOHIDManagerRegisterInputValueCallback
. Я стараюсь быть хорошим гражданином и убирать после себя.Как отличить nil в IOKit.IOHIDValueCallback в swift
код [документация] (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 (с) (опционально, Int32, Опционально, IOHIDValue) ->() ')
Как я могу нанести нуль на правильный тип?
Вот пример кода, который должен составлять:
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);
}
}
если вы хотите полный проект, Checkout https://github.com/jeantil/autokbisw и посмотреть на IOKeyEventMonitor#deinit