2016-10-03 3 views
4

После того, как преобразовать от быстрой 2 до быстры 3, возникает ошибка выскочит за ниже metioned линииUnsafePointer больше не работает в быстром 3

let value = UnsafePointer<UInt32>(array1).pointee 

«инициализации» недоступен: использование «withMemoryRebound (to: capacity: _) 'для временного просмотра памяти в качестве другого совместимого с макета типа.

в swift2 это походит

let value = UnsafePointer<UInt32>(array1).memory 

Может кто-нибудь объяснить, пожалуйста? К сожалению, я совершенно новой для swift3

После того, как я есть внести изменения в

let abc = UnsafePointer<UInt32>(array1).withMemoryRebound(to: <#T##T.Type#>, capacity: <#T##Int#>, <#T##body: (UnsafeMutablePointer<T>) throws -> Result##(UnsafeMutablePointer<T>) throws -> Result#>) 

, но еще какое значение должно идти в переменной? К сожалению, у меня есть поиск вокруг, но слишком плохо, я не могу найти решение

+0

'Результаты из функций C, возвращающих указатели с возможностью NULL, должны быть явно развернуты перед доступом к объекту pointee (ранее памяти) или элементам индекса. Дополнительный синтаксис цепочки хорошо работает здесь, например. result? .pointee = sum.' Это поможет ... https: //swift.org/migration-guide/ –

+1

Пожалуйста, покажите, что вы на самом деле пытаетесь сделать. – matt

+0

Какой тип 'array1'?' UnsafeRawPointer'? – LinShiwei

ответ

6

Вы можете попробовать это:

let rawPointer = UnsafeRawPointer(array1) 
let pointer = rawPointer.assumingMemoryBound(to: UInt32.self) 
let value = pointer.pointee 

Raw указатель является указателем для доступа untype данных.

assumingMemoryBound(to:) может конвертировать из UnsafeRawPointer в UnsafePointer<T>.

Ссылка: Swift 3.0 Unsafe World

0

Если array является Array, лучше всего использовать withUnsafeBufferPointer:

array.withUnsafeBufferPointer { buffer in 
    // do something with 'buffer' 
    // (if you need an UnsafePointer rather than an UnsafeBufferPointer, 
    // you can access that via the buffer's .baseAddress property) 
} 

Убедитесь, что вы не позволяйте побегу указатель буфера от закрытия, так как это будет недействительны вне его.

Смежные вопросы