Xcode 如何在swift中将nil转换为IOKit.IOHIDValueCallback
我用swift编写了一个小实用程序,它使用Xcode 如何在swift中将nil转换为IOKit.IOHIDValueCallback,xcode,macos,swift3,iokit,Xcode,Macos,Swift3,Iokit,我用swift编写了一个小实用程序,它使用IOHIDManagerRegisterInputValueCallback注册回调。我正在努力做一个好公民,为自己打扫卫生 [documentation]()说明要取消注册,应使用Null 注意:取消注册回调的passnull 不幸的是 IOHIDManagerRegisterInputValueCallback( hidManager, nil , nil); 没有说: Nil与预期的参数类型“IOHIDValueCallback”(又名“@con
IOHIDManagerRegisterInputValueCallback
注册回调。我正在努力做一个好公民,为自己打扫卫生
[documentation]()说明要取消注册,应使用Null
注意:取消注册回调的passnull
不幸的是
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);
}
}
如果您想要一个完整的项目,请签出并查看过了很长一段时间,我再次打开了该项目,并且在再次阅读方法签名时,我注意到swift绑定的签名实际上需要一个
IOHIDValueCallback?
这意味着一个可选的IOHIDValueCallback
@available(OSX 10.5, *)
public func IOHIDManagerRegisterInputValueCallback(_ manager: IOHIDManager, _ callback: IOKit.IOHIDValueCallback?, _ context: UnsafeMutableRawPointer?)
这对我来说并不明显,因为在调用方法时可以直接传递IOHIDValueCallback
值,而无需显式包装
注意到这一点,解决方案显而易见:
IOHIDManagerRegisterInputValueCallback( hidManager, Optional.none , context);
程序现在可以编译了,而且似乎运行正常。过了很长时间,我再次打开了该项目,并且在再次阅读方法签名时,我注意到swift绑定的签名实际上需要一个
IOHIDValueCallback?
,这意味着一个可选的IOHIDValueCallback
@available(OSX 10.5, *)
public func IOHIDManagerRegisterInputValueCallback(_ manager: IOHIDManager, _ callback: IOKit.IOHIDValueCallback?, _ context: UnsafeMutableRawPointer?)
这对我来说并不明显,因为在调用方法时可以直接传递IOHIDValueCallback
值,而无需显式包装
注意到这一点,解决方案显而易见:
IOHIDManagerRegisterInputValueCallback( hidManager, Optional.none , context);
该程序现在可以编译,并且似乎运行正常