web-dev-qa-db-ja.com

警告: 'UnsafeBufferPointer <T>'を初期化すると、ダングリングバッファーポインターが発生します

Swift 5.2/Xcode 11.4にアップデートすると、次のコードに対する警告が表示されます。

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) }
    }
}

オンラインlet pointer = UnsafeBufferPointer(start:&value、count:1)取得

「UnsafeBufferPointer」を初期化すると、ダングリングバッファーポインターが発生します

@silenceWarningを使用できますが、それは汚いソリューションです。多分私はどこかにポインターを保存して将来それをきれいにする必要がありますか?

15
Exey Panteleev

ここで良い答えが見つかりました 往復Swiftデータへの/からの数値タイプ

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