У меня был код, который выглядел почти точно, что вы делали, и получал то же предупреждение. Мои отличия немного отличались в отношении, который имеет отношение к обсуждению 'init (start: count :)' "
Но возврат из UnsafeBufferPointer ни к чему не привязан, поэтому я не смог использовать его вне области действия init, если попытался. Таким образом, компилятор здесь предупреждает меня о том, что я не могу сделать что-либо.
Я думаю, Data.init (buffer:) может хранить 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)
}
И это не генерирует предупреждение и, кажется, работает (в любом случае, в моем приложении). Вопрос о том, проходит ли это экспертизу, - другой вопрос.
В некотором роде я испытываю ностальгию c по дням Хлока и Хэнлока