Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 如何在swift中将nil转换为IOKit.IOHIDValueCallback_Xcode_Macos_Swift3_Iokit - Fatal编程技术网

Xcode 如何在swift中将nil转换为IOKit.IOHIDValueCallback

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

我用swift编写了一个小实用程序,它使用
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);
该程序现在可以编译,并且似乎运行正常