web-dev-qa-db-fra.com

Avertissement: l'initialisation de 'UnsafeBufferPointer <T>' entraîne un pointeur de tampon suspendu

Après la mise à jour vers Swift 5.2/Xcode 11.4 a reçu un avertissement sur le code suivant:

extension Data {

    init<T>(from value: T) {
        var value = value
        let pointer = UnsafeBufferPointer(start: &value, count: 1)
        self.init(buffer: pointer)
    }

    func to<T>(type: T.Type) -> T {
        return self.withUnsafeBytes { $0.load(as: T.self) }
    }
}

En ligne let pointer = UnsafeBufferPointer (start: & value, count: 1) J'ai

L'initialisation de 'UnsafeBufferPointer' entraîne un pointeur de tampon suspendu

Je peux utiliser @silenceWarning mais c'est une solution sale. Peut-être ai-je besoin de stocker le pointeur quelque part et de le nettoyer à l'avenir?

15
Exey Panteleev

J'ai trouvé une bonne réponse ici aller-retour Swift types de nombres vers/depuis les données

// value into Data
let data = withUnsafeBytes(of: value) { Data($0) }
// Data into value
_ = withUnsafeMutableBytes(of: &value, { data.copyBytes(to: $0)} )
0
user1055568