Saya memiliki kode yang terlihat hampir persis seperti apa yang Anda lakukan dan mendapatkan peringatan yang sama. Milik saya sedikit berbeda dengan cara yang relevan dengan diskusi
init<T>(from value: T) {
var value = value
self.init(buffer: UnsafeBufferPointer(start: &value, count: 1))
}
Ini masih menghasilkan peringatan bahwa UnsafeBufferPointer menghasilkan Pointer menggantung tetapi petunjuk mengatakan "menghasilkan pointer yang hanya valid selama durasi panggilan untuk 'init (start: count :)'"
Tetapi pengembalian dari UnsafeBufferPointer tidak ditugaskan untuk apa pun, jadi saya tidak bisa menggunakannya di luar ruang lingkup init jika saya mencoba. Jadi kompiler di sini memperingatkan saya untuk tidak melakukan sesuatu yang tidak bisa saya lakukan.
Saya kira Data.init (buffer:) dapat menyimpan ptr, tetapi saya akan menganggap bahwa jika ia menerima UnsafeBufferPointer, ia menerima tanggung jawab untuk menggunakannya dengan benar
Bagaimanapun, itu masih tidak benar-benar memperbaiki masalah Anda. Saya mendapat peringatan dengan ini
init<T>(from value: T) {
var value = value
var myData = Data()
withUnsafePointer(to:&value, { (ptr: UnsafePointer<T>) -> Void in
myData = Data( buffer: UnsafeBufferPointer(start: ptr, count: 1))
})
self.init(myData)
}
Dan ini tidak menghasilkan peringatan dan tampaknya berfungsi (dalam aplikasi saya sih). Apakah hal itu sesuai dengan para ahli di sini adalah masalah lain.
Agak membuat saya nostalgia untuk hari-hari HLock dan HUnlock