我考虑了很多similar问题,但仍然无法让编译器接受这一点。
Socket Mobile API(在 Objective-C 中)将 ISktScanDecodedData 传递到 Swift 中的委托方法中(数据可能是二进制的,我想这就是为什么它不以字符串形式提供的原因):
func onDecodedData(device: DeviceInfo?, DecodedData d: ISktScanDecodedData?) {
let symbology: String = d!.Name()
let rawData: UnsafePointer<UInt8> = d!.getData()
let rawDataSize: UInt32 = decoded!.getDataSize()
// want a String (UTF8 is OK) or Swifty byte array...
}
在 C# 中,以下代码将原始数据转换为字符串:
string s = Marshal.PtrToStringAuto(d.GetData(), d.GetDataSize());
在 Swift 中,我可以达到UnsafeArray
,但后来我陷入困境:
let rawArray = UnsafeArray<UInt8>(start: rawData, length: Int(rawDataSize))
或者我看到String.fromCString
and NSString.stringWithCharacters
,但两者都不会接受手头的参数类型。如果我可以从UnsafePointer<UInt8>
to UnsafePointer<()>
,例如,那么这将是可用的(尽管我不确定它是否安全):
NSData(bytesNoCopy: UnsafePointer<()>, length: Int, freeWhenDone: Bool)
有没有一种明显的方法可以从这一切中获取字符串?