ios swift3 unsafe-pointers

ios - UnsafePointer<UInt8> inicializador en Swift 3



swift3 unsafe-pointers (2)

  1. En Swift 3, no puede UnsafePointer un UnsafePointer utilizando un UnsafeRawPointer .

    Puede usar assumingMemoryBound(to:) para convertir un UnsafeRawPointer en un UnsafePointer<T> . Me gusta esto:

    var ptr = data.bytes.assumingMemoryBound(to: UInt8.self)

  2. Use debugDescription o distance(to:) para comparar dos punteros.

    while(ptr.debugDescription < endPtr.debugDescription)

    o

    while(ptr.distance(to:endPtr) > 0)

Tengo una clase de validación de recibos que está en desuso desde que Swift 3 se ha lanzado. He arreglado algunos problemas, pero todavía tengo muchos ...

Aquí está el código fuente de GitHub que utilicé: https://gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-swift y https://gist.github.com/baileysh9/eddcba49d544635b3cf5

  1. Primer error:

    var p = UnsafePointer<UInt8>(data.bytes)

Lanzamientos de compiladores: no se puede invocar el inicializador para el tipo UnsafePointer (UInt8) con una lista de argumentos de tipo UnsafeRawPointer

  1. Segundo error

    while (ptr < end)

Los operadores binarios <no se pueden aplicar a dos operandos UnsafePointer (UInt8)

Muchas gracias de antemano :)

EDITAR

Gracias a la respuesta de LinShiwei, encontré una solución a la declaración de UnsafePointer. Se compila pero aún no se ha probado (porque otros errores me evitan probar):

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)


Puede que haya cambiado recientemente a solo esto, sin los ".bytes". parte:

var p: UnsafePointer = data.assumingMemoryBound(to: UInt8.self)

del original:

var p = UnsafePointer<UInt8>(data.bytes)