Saya menulis sebuah utilitas kecil di Swift yang mendaftarkan panggilan balik menggunakan IOHIDManagerRegisterInputValueCallback
. Saya mencoba menjadi warga negara yang baik dan membersihkan diri saya sendiri.
[Dokumentasi] (https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html#//apple_ref/doc/uid/TP40000970-CH214-SW61) mengatakan bahwa untuk membatalkan pendaftaran seseorang harus memanggil fungsi pendaftaran dengan Null
Catatan: Untuk membatalkan pendaftaran, berikan NULL untuk panggilan balik.
Sayangnya
IOHIDManagerRegisterInputValueCallback( hidManager, nil , nil);
tidak dikompilasi dengan mengatakan:
Nil tidak kompatibel dengan tipe argumen yang diharapkan 'IOHIDValueCallback' (alias '@convention(c) (Opsional, Int32, Opsional, IOHIDValue) -> ()')
Bagaimana saya bisa memasukkan nil ke tipe yang benar?
Berikut adalah contoh kode yang harus dikompilasi:
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);
}
}
jika Anda ingin proyek lengkap, periksa https://github.com/jeantil/autokbisw dan lihat IOKeyEventMonitor#deinit