Я работаю с библиотекой Accelerate для моего приложения для iOS. Я построил это приложение в Swift 2.0 пару лет назад, и оно работало нормально. Теперь, когда Swift обновлен до 3.0 и 4.0, мне нужно преобразовать большую часть кода в текущий синтаксис. Я запустил конвертер, но у меня все еще есть некоторые синтаксические ошибки. Это тот, который у меня возникли проблемы больше всего исправить. Кажется, я не мог найти столь же краткий способ исправить это.
Я сделал функции для основной арифметической операции над изображениями.
Это один из них:
public func add(_ left: Image, right: Image) -> Image! {
let results = Image.init(rows: left.size.rows, columns: left.size.columns, pixelSize: left.pixelSize)
let leftOperand = UnsafeMutablePointer<Float>(left.buffer.data)
let rightOperand = UnsafeMutablePointer<Float>(right.buffer.data)
let destination = UnsafeMutablePointer<Float>(results.buffer.data)
vDSP_vadd(leftOperand, 1, rightOperand, 1, destination, 1, UInt(left.lengthOfBuffer))
return results
}
Класс Image
имеет поле buffer
, которое является vImage_Buffer
и определено так:
open class Image {
open var buffer: vImage_Buffer
....}
Проблема:
Вызов buffer.data
возвращает тип UnsafeMutableRawPointer!
. Функция vDSP_add
требует UnsafeMutablePointer<Float>
для своих параметров. Раньше я мог сразу приводить его к объекту UnsafeMutablePointer<Float>
. Похоже, инициализатор устарел сейчас. Таким образом, на кодах типа let leftOperand = UnsafeMutablePointer<Float>(left.buffer.data)
я получаю эту ошибку
Cannot invoke initializer for type 'UnsafeMutablePointer<Float>' with an argument list of type '(UnsafeMutableRawPointer!)'.
Я не знаю, пропускаю ли я что-то очень простое здесь, но я все еще не исправил это. Но я ищу решение, которое не требует ручного копирования каждого элемента с использованием цикла, так как эта функция вызывается в приложении довольно часто.
Только некоторые ссылки на документацию, которые могут помочь:
Заранее спасибо!