自Swift 3发布以来,我已经弃用了收据验证类。我解决了一些问题,但是我还有很多问题...

这是我使用的GitHub源代码:https://gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-swifthttps://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)
    

    最佳答案

  • 在Swift 3中,您不能使用UnsafePointer初始化UnsafeRawPointer

    您可以使用assumingMemoryBound(to:)UnsafeRawPointer转换为UnsafePointer<T>。像这样:
    var ptr = data.bytes.assumingMemoryBound(to: UInt8.self)
    
  • 使用debugDescriptiondistance(to:)比较两个指针。
    while(ptr.debugDescription < endPtr.debugDescription)
    

    或者
    while(ptr.distance(to:endPtr) > 0)
    
  • 关于ios - Swift 3中的UnsafePointer <UInt8>初始化程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39747190/

    10-10 17:11