自Swift 3发布以来,我已经弃用了收据验证类。我解决了一些问题,但是我还有很多问题...
这是我使用的GitHub源代码:https://gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-swift和https://gist.github.com/baileysh9/eddcba49d544635b3cf5
var p = UnsafePointer<UInt8>(data.bytes)
编译器抛出:无法使用类型为UnsafeRawPointer的参数列表调用类型为UnsafePointer(UInt8)的初始化程序
while (ptr < end)
二进制运算符
非常感谢 :)
编辑
感谢LinShiwei的回答,我找到了UnsafePointer声明的解决方案。它可以编译但尚未测试(因为其他错误使我无法进行测试):
func getProductIdFromReceipt(_ data:Data) -> String?
{
let tempData: NSMutableData = NSMutableData(length: 26)!
data.withUnsafeBytes {
tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes: $0)
}
var p: UnsafePointer? = tempData.bytes.assumingMemoryBound(to: UInt8.self)
最佳答案
UnsafePointer
初始化UnsafeRawPointer
。您可以使用
assumingMemoryBound(to:)
将UnsafeRawPointer
转换为UnsafePointer<T>
。像这样:var ptr = data.bytes.assumingMemoryBound(to: UInt8.self)
debugDescription
或distance(to:)
比较两个指针。while(ptr.debugDescription < endPtr.debugDescription)
或者
while(ptr.distance(to:endPtr) > 0)
关于ios - Swift 3中的UnsafePointer <UInt8>初始化程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39747190/