2016-11-25 5 views
1

私はswiftに小さなユーティリティを書き込んで、IOHIDManagerRegisterInputValueCallbackを使ってコールバックを登録します。私は自分自身の後で良い市民とクリーンアップをしようとしています。コールバックパスNULLの登録を解除するには:即時にIOKit.IOHIDValueCallbackにnilをキャストする方法

[ドキュメント](https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html#//apple_ref/doc/uid/TP40000970-CH214-SW61)は1がNull

注意して登録機能を呼び出す必要が登録を解除することを言います。

無記号が期待される引数の型 'IOHIDValueCallback'(別名「@convention(C)(オプション、のInt32、と互換性がありません。残念ながら

IOHIDManagerRegisterInputValueCallback(hidManager, nil , nil); 

が言ってコンパイルされません

オプション、IOHIDValue) - >() ')

どのようにnilを正しい型にキャストできますか?ここで

はコンパイルする必要があり、サンプルコードです:私はもう一度そのプロジェクトを開いているときに、完全なプロジェクト、チェックアウト https://github.com/jeantil/autokbiswをしたい場合

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); 
    } 
} 

をし、長い後IOKeyEventMonitor#deinit

答えて

0

を見て、熟読しながら、メソッドシグネチャを再度確認すると、スウィフトバインディングのシグネチャが実際には(任意)を意味することに気付きました。IOHIDValueCallback

メソッドを呼び出すときに明示的な折り返しなしでIOHIDValueCallback値を直接渡すことができるので、これは明らかにわかりませんでした。

IOHIDManagerRegisterInputValueCallback(hidManager, Optional.none , context); 

プログラムは、今コンパイルし、適切に動作するようです:この気づい

は明白な解決策を作りました。

関連する問題