我考虑了很多类似的问题,但仍然无法让编译器接受这个.
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...
}
Run Code Online (Sandbox Code Playgroud)
在C#中,此代码将原始数据转换为字符串:
string s = Marshal.PtrToStringAuto(d.GetData(), d.GetDataSize());
Run Code Online (Sandbox Code Playgroud)
在斯威夫特,我可以得到UnsafeArray,但后来我卡住了:
let rawArray = UnsafeArray<UInt8>(start: rawData, length: Int(rawDataSize))
Run Code Online (Sandbox Code Playgroud)
另外我看String.fromCString和NSString.stringWithCharacters,但也不会在手上接受类型的参数.如果我可以从转换UnsafePointer<UInt8>到UnsafePointer<()>,例如,那么这将是可用的(虽然我不知道如果它甚至会是安全的):
NSData(bytesNoCopy: UnsafePointer<()>, length: Int, freeWhenDone: Bool)
Run Code Online (Sandbox Code Playgroud)
是否有明显的方法来获取所有这些字符串?