Вы можете использовать withUnsafeBytes(_:)
прямо так:
mutating func scopeOfAwesomeStruct() {
withUnsafeBytes(of: &self) {rbp in
let ptr = rbp.baseAddress!.assumingMemoryBound(to: UInt8.self)
//...
}
}
Как уже отмечалось, не экспортируйте ptr
за пределы замыкания.
И это не такбезопасно, даже если у вас есть функция, которая знает длину структуры.Стабильность Swift API пока не объявлена.Любые детали компоновки структур не гарантируются, включая порядок свойств и порядок размещения отступов.Это может отличаться от структур C # и может дать результат, отличный от C #.
Я (и многие другие разработчики) верю и ожидаю, что текущая стратегия компоновки не изменится вближайшее будущее, поэтому я бы написал такой код, как ваш.Но я не думаю, что это безопасно.Помните, что Swift - это не C.
(Хотя все равно, если вы копируете содержимое структуры в Data
.)
Если вы хотите строго точную компоновку с C,Вы можете написать структуру C и импортировать ее в свой проект Swift.