12 votes

Comment utiliser UnsafeMutablePointer en Swift 3 ?

J'ai le code suivant écrit en Swift 2.2 :

let keyData = NSMutableData(length: 64)!
SecRandomCopyBytes(kSecRandomDefault, 64, UnsafeMutablePointer<UInt8>(keyData.mutableBytes))

XCode 8 met en évidence cette deuxième ligne et affirme que

Impossible d'invoquer l'initialisateur pour t liste d'arguments de type '(UnsafeMutableRawPointer)'.

Bien que j'apprécie que XCode me dise cela, je ne comprends pas bien comment changer le UnsafeMutableRawPointer pour qu'il soit acceptable.

Quelqu'un sait-il comment convertir ce code en Swift 3 ?

17voto

OOPer Points 33473

Je vous recommande de travailler avec Data plutôt que NSData dans Swift 3.

var keyData = Data(count: 64)
let result = keyData.withUnsafeMutableBytes {mutableBytes in
    SecRandomCopyBytes(kSecRandomDefault, keyData.count, mutableBytes)
}

withUnsafeMutableBytes(_:) est déclaré comme une méthode générique, donc, dans des cas simples comme celui-ci, vous pouvez l'utiliser sans spécifier le type d'élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X