J'ai une classe de validation de reçu qui est déconseillée depuis Swift 3 est sorti. J'ai corrigé quelques problèmes, mais j'en ai encore beaucoup ...
Voici le code source GitHub que j'ai utilisé: https://Gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-Swift et https://Gist.github.com/ baileysh9/eddcba49d544635b3cf5
Première erreur:
var p = UnsafePointer<UInt8>(data.bytes)
Le compilateur lance: Impossible d'appeler l'initialiseur pour le type UnsafePointer (UInt8) avec une liste d'arguments de type UnsafeRawPointer
Deuxième erreur
while (ptr < end)
Les opérateurs binaires <ne peuvent pas être appliqués à deux opérandes UnsafePointer (UInt8)
Merci beaucoup d'avance :)
[~ # ~] modifier [~ # ~]
Grâce à la réponse de LinShiwei, j'ai trouvé une solution à la déclaration UnsafePointer. Il compile mais n'a pas encore été testé (car d'autres erreurs m'évitent de tester):
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)
Dans Swift 3, vous ne pouvez pas initier un UnsafePointer
en utilisant un UnsafeRawPointer
.
Vous pouvez utiliser assumingMemoryBound(to:)
pour convertir un UnsafeRawPointer
en un UnsafePointer<T>
. Comme ça:
var ptr = data.bytes.assumingMemoryBound(to: UInt8.self)
Utilisez debugDescription
ou distance(to:)
pour comparer deux pointeurs.
while(ptr.debugDescription < endPtr.debugDescription)
ou
while(ptr.distance(to:endPtr) > 0)