मेरे पास कोड था जो लगभग वही दिख रहा था जो आप कर रहे थे और वही चेतावनी मिल रही थी। मेरा तरीका थोड़ा अलग था जो चर्चा के लिए प्रासंगिक है
init<T>(from value: T) {
var value = value
self.init(buffer: UnsafeBufferPointer(start: &value, count: 1))
}
यह अभी भी चेतावनी उत्पन्न करता है कि UnsafeBufferPointer एक झूलने वाला सूचक उत्पन्न कर रहा है, लेकिन संकेत कहते हैं "कॉल करने की अवधि के लिए केवल एक पॉइंटर वैध बनाता है (प्रारंभ: गिनती :) '"
लेकिन UnsafeBufferPointer से वापसी को कुछ भी नहीं सौंपा गया है, इसलिए अगर मैंने कोशिश की तो मैं इसे इनिट के दायरे से बाहर इस्तेमाल नहीं कर सकता। तो यहाँ संकलक मुझे कुछ करने के खिलाफ चेतावनी दे रहा है जो मैं वैसे भी नहीं कर सकता।
मुझे लगता है कि Data.init (बफ़र): ptr को स्टोर कर सकता है, लेकिन मुझे लगता है कि अगर यह एक UnsafeBufferPointer को स्वीकार करता है, तो यह इसे ठीक से उपयोग करने की जिम्मेदारी स्वीकार कर रहा है
वैसे भी, यह अभी भी वास्तव में आपकी समस्या को ठीक नहीं करता है। मुझे इसके साथ चेतावनी मिली
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)
}
और यह चेतावनी उत्पन्न नहीं करता है और काम करने के लिए प्रकट होता है (वैसे भी मेरे आवेदन में)। चाहे वह यहां के विशेषज्ञों के साथ मस्टर को पास करे, यह दूसरी बात है।
की तरह मुझे HLock और HUnlock के दिनों के लिए उदासीन बनाता है