ios - UnsafePointer<UInt8> inicializador en Swift 3
swift3 unsafe-pointers (2)
En Swift 3, no puede
UnsafePointer
unUnsafePointer
utilizando unUnsafeRawPointer
.Puede usar
assumingMemoryBound(to:)
para convertir unUnsafeRawPointer
en unUnsafePointer<T>
. Me gusta esto:var ptr = data.bytes.assumingMemoryBound(to: UInt8.self)
Use
debugDescription
odistance(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
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
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)