IOHIDDeviceSetReport方法不接受Swift 3中的UnsafeRawPointer类型

时间:2016-10-31 10:05:41

标签: swift xcode swift3

IOHIDDeviceSetReport方法不接受UnsafeRawPointer类型 方法签名是:

IOHIDDeviceSetReport(<#T##device: IOHIDDevice##IOHIDDevice#>, <#T##reportType: IOHIDReportType##IOHIDReportType#>, <#T##reportID: CFIndex##CFIndex#>, <#T##report: UnsafePointer<UInt8>##UnsafePointer<UInt8>#>, <#T##reportLength: CFIndex##CFIndex#>)

允许仅作为输入提供UnsafePointer类型,但在swift 3中我可以使用UnsafeRawPointer类型。 有没有人知道如何从UnsafeRawPointer获取UnsafeRawPointer?

2 个答案:

答案 0 :(得分:1)

有几种方法可以将UnsafeRawPointer迁移到UnsafePointer。我最常用的一个是:

UnsafePointer.withMemoryRebound(to:capacity:_)

您应该能够使用上面提到的或上一页提到的其他方法来完成您的需要:

https://swift.org/migration-guide/se-0107-migrate.html

答案 1 :(得分:0)

如果报告以Data值给出,那么您可以使用。{ withUnsafeBytes()方法来访问字节。 使用UnsafePointer<T>参数指向调用闭包 到字节。在这里,编译器可以自动将T推断为UInt8 来自report参数的类型:

let result = data.withUnsafeBytes {
    IOHIDDeviceSetReport(device, type, reportID, $0, data.count)
}